两个表:A
表, B
表
A
id | outer_id | ... |
---|---|---|
1 | 1 | ... |
2 | 1 | ... |
3 | 2 | ... |
4 | 4 | ... |
5 | 6 | ... |
6 | 10 | ... |
B
id | type | ... |
---|---|---|
1 | 99 | ... |
2 | 0 | ... |
3 | 99 | ... |
4 | 1 | ... |
5 | 3 | ... |
6 | 99 | ... |
想要查询出A
表的两种数据,一种是用A
表的outer_id
关联B
表的id
,如果存在,type
不能是 99
这个数据才需要,如果不存在,这个A
表数据也要。
另外一个数据就是B
表必须存在且 type
等于 99
。
这个两个SQL好像是:
SELECT a.* FROM A AS a WHERE ((SELECT b.type FROM B AS b WHERE b.id = a.outer_id LIMIT 1) is null) OR (SELECT b.type FROM B AS b WHERE b.id = a.outer_id LIMIT 1) != 99
SELECT a.* FROM A AS a WHERE (SELECT b.type FROM B AS b WHERE b.id = a.outer_id LIMIT 1) = 99
这样对吗
你的第一种数据有点不好理解,我是这样写的,
第二种数据