我有3个表格,即A,B & c。在Parent上运行查询以显示只有一个子表的记录
乙& C有A.
现在我想运行上的一个查询,以这样的方式的关键forign,只返回B的记录。
也就是说,我要排除所有C的结果,并显示B的结果仅,当A.
希望的所有记录执行查询时,我有这个问题是有道理的。
我有3个表格,即A,B & c。在Parent上运行查询以显示只有一个子表的记录
乙& C有A.
现在我想运行上的一个查询,以这样的方式的关键forign,只返回B的记录。
也就是说,我要排除所有C的结果,并显示B的结果仅,当A.
希望的所有记录执行查询时,我有这个问题是有道理的。
如果你想返回从B,则东西左外连接A的所有记录和任何匹配的记录是适当的:
SELECT a.*, b.*
FROM a, b
WHERE a.id = b.id
这会从A
返回每条记录,然后从B
填充值哪里有一场比赛。如果B
中有多个匹配的行,这也将返回多行记录发生在A
中的记录。
仅仅因为在C
中有一个引用表A
中的某个外键,除非在查询中使用它,否则不会被返回。
如果你只是想从B
返回的所有记录,当外键出现在A
,那么也许你想:
SELECT *
FROM B
WHERE B.id in (SELECT id FROM A)
AND B.id not in (SELECT id FROM C)
或
SELECT *
FROM B
WHERE EXISTS (SELECT 1 FROM A JOIN B on A.id = B.id)
AND NOT EXISTS (SELECT 1 FROM C JOIN B on C.id = B.id)
所有这些假设id
是关键,其常见。
这是你想要的吗?
select a.*
from a
where exists (select 1 from b where b.aid = a.aid) and
not exists (select 1 from c where c.aid = c.aid);
只需将您想要查看的属性放在select中即可。例如,'SELECT B.foo,B.bar FROM A JOIN B ON B.A_id = A.id JOIN C ON C.A_id = A.id WHERE ...' – lurker 2014-09-13 16:19:04