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)的数据
+----+---------+---------+----------+
| 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的状态算是什么?
select * from a inner join b on a.id=b.aId where b.status in(3,4,5) or b.status is null
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>
1状态算 待确认的
我期望的结果
查出空闲的及表test_a 中Id 为 4
使用的及表test_a 中Id 为 1 2 3
这里我开始自己是用 left join on 查的但是查出来有重复数据!
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_a 中Id 为 4
使用的及表test_a 中Id 为 1 2 3
这里 id=(select max(id) from test_b where aId=test_a.id)test_b 与 test_a 的 id 不能直接等啊
test_b.aid = test_a.id
select * from test_a
left join test_b on test_a.id = test_b.aId
where (status=3 or status =4 )我这样可查到 处于使用的记录
但我不想有 左连接
能解释一下你的结果是怎么得出来的吗?
空闲的及表test_a 中Id 为 4 ID为4的为什么符合 status 值为3和4 ?
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)存在的问题就是
含有重复的数据
| 10 | 4 | 1 |这里有status = 1 啊,为什么4仍符合你的条件?