CREATE TABLE `test_a` (
  `id` int(11) NOT NULL,
  `matName` varchar(128) default NULL,
  `matCode` varchar(64) default NULL,
  `keyWords` varchar(128) default NULL,
  PRIMARY KEY  (`id`)
) INSERT INTO  `test_a`( `id`, `matName`) VALUE (1,'a');
INSERT INTO  `test_a`( `id`, `matName`) VALUE (2,'b');
INSERT INTO  `test_a`( `id`, `matName`) VALUE (3,'c');
INSERT INTO  `test_a`( `id`, `matName`) VALUE (4,'d');CREATE TABLE `test_b` (
  `id` int(11) NOT NULL,
  `aId` int(11) default NULL,
  `status` int(11) default NULL,
  PRIMARY KEY  (`id`)
) INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (1,1,3);
INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (2,1,2);
INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (3,1,2);
INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (4,1,5);
INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (5,2,4);
INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (6,2,5);
INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (7,2,2);
INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (8,2,5);
INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (9,3,3);
INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (10,4,1);如上所述存在两张表
其中test_b表中的status 的值有
1  待认可
2  等待
3  使用
4  超期
5  释放现需查出
test_a 中处于使用状态(及test_b中status 值为3和4)的数据
test_a 中处于空闲状态(及test_b中status 值为5和null)的数据

解决方案 »

  1.   

    mysql> select * from test_a;
    +----+---------+---------+----------+
    | id | matName | matCode | keyWords |
    +----+---------+---------+----------+
    |  1 | a       | NULL    | NULL     |
    |  2 | b       | NULL    | NULL     |
    |  3 | c       | NULL    | NULL     |
    |  4 | d       | NULL    | NULL     |
    +----+---------+---------+----------+
    4 rows in set (0.01 sec)mysql> select * from test_b;
    +----+------+--------+
    | id | aId  | status |
    +----+------+--------+
    |  1 |    1 |      3 |
    |  2 |    1 |      2 |
    |  3 |    1 |      2 |
    |  4 |    1 |      5 |
    |  5 |    2 |      4 |
    |  6 |    2 |      5 |
    |  7 |    2 |      2 |
    |  8 |    2 |      5 |
    |  9 |    3 |      3 |
    | 10 |    4 |      1 |
    +----+------+--------+
    10 rows in set (0.00 sec)mysql>基于以上数据,你期望的正确结果是什么?   参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       +----+------+--------+
    | id | aId  | status |
    +----+------+--------+
    |  1 |    1 |      3 |
    |  2 |    1 |      2 |
    |  3 |    1 |      2 |
    |  4 |    1 |      5 |另外AID=1的状态算是什么?
      

  2.   

    要求结果出来看看
    select * from a inner join b on a.id=b.aId where b.status in(3,4,5) or b.status is null
      

  3.   

    你是不是想要这个?-- test_a 中处于使用状态(及test_b中status 值为3和4)的数据
    mysql> select *
        -> from test_a
        -> where exists (
        ->  select 1 from test_b where (status=3 or status=4)
        ->          and id=(select max(id) from test_b where aId=test_a.id)
        -> );
    +----+---------+---------+----------+
    | id | matName | matCode | keyWords |
    +----+---------+---------+----------+
    |  3 | c       | NULL    | NULL     |
    +----+---------+---------+----------+
    1 row in set (0.09 sec)-- test_a 中处于空闲状态(及test_b中status 值为5和null)的数据
    mysql> select *
        -> from test_a
        -> where exists (
        ->  select 1 from test_b where (status=5 or status is null)
        ->          and id=(select max(id) from test_b where aId=test_a.id)
        -> );
    +----+---------+---------+----------+
    | id | matName | matCode | keyWords |
    +----+---------+---------+----------+
    |  1 | a       | NULL    | NULL     |
    |  2 | b       | NULL    | NULL     |
    +----+---------+---------+----------+
    2 rows in set (0.00 sec)mysql>
      

  4.   

    另外AID=1的状态算是什么?
    1状态算 待确认的
    我期望的结果
    查出空闲的及表test_a 中Id 为 4
    使用的及表test_a 中Id 为 1 2 3 
      

  5.   


    这里我开始自己是用 left join on 查的但是查出来有重复数据!
      

  6.   


    CREATE TABLE `test_a` (
      `id` int(11) NOT NULL,
      `matName` varchar(128) default NULL,
      `matCode` varchar(64) default NULL,
      `keyWords` varchar(128) default NULL,
      PRIMARY KEY  (`id`)
    ) INSERT INTO  `test_a`( `id`, `matName`) VALUE (1,'a');
    INSERT INTO  `test_a`( `id`, `matName`) VALUE (2,'b');
    INSERT INTO  `test_a`( `id`, `matName`) VALUE (3,'c');
    INSERT INTO  `test_a`( `id`, `matName`) VALUE (4,'d');CREATE TABLE `test_b` (
      `id` int(11) NOT NULL,
      `aId` int(11) default NULL,
      `status` int(11) default NULL,
      PRIMARY KEY  (`id`)
    ) INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (1,1,3);
    INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (2,1,2);
    INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (3,1,2);
    INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (4,1,5);
    INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (5,2,4);
    INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (6,2,5);
    INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (7,2,2);
    INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (8,2,5);
    INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (9,3,3);
    INSERT INTO  `test_b`( `id`, `aId`,`status`) VALUE (10,4,1);
      

  7.   

    我期望的结果
    查出空闲的及表test_a 中Id 为 4
    使用的及表test_a 中Id 为 1 2 3 
      

  8.   

    大大 
    这里 id=(select max(id) from test_b where aId=test_a.id)test_b 与 test_a 的 id 不能直接等啊 
    test_b.aid = test_a.id
      

  9.   


      select * from test_a
    left join test_b on test_a.id  = test_b.aId
    where (status=3 or status =4 )我这样可查到 处于使用的记录
    但我不想有  左连接
      

  10.   


    能解释一下你的结果是怎么得出来的吗? 
    空闲的及表test_a 中Id 为 4  ID为4的为什么符合  status 值为3和4 ?
      

  11.   

    查使用中的
    select * from test_a
    left join test_b on test_a.id  = test_b.aId
    where (status=3 or status =4 )这个可以查出,但我不想用连接空闲的
    我的意思就是在B 表中状态为5而无其他记录(可以为条数据都为5) 或者没有记录的我这样查 
    select * from test_a
    left join test_b on test_a.id  = test_b.aId
    where (status=5 or status is null)存在的问题就是
    含有重复的数据
      

  12.   


    | 10 |    4 |      1 |这里有status = 1 啊,为什么4仍符合你的条件?