1

JOIN即使是简单的查询,我仍然遇到困难。从上一个问题Simple but nested SELECT query中,我学到了很多东西,但仍然无法完成我的JOIN查询。:(

我从最后一个问题中得到了这个查询,它正在工作:

SELECT c.value, d.value 
FROM a
LEFT JOIN b
    ON a.id = b.idy
LEFT JOIN c
    ON b.idx = c.id
LEFT JOIN d
    ON b.idx = d.id
WHERE a.name = "test" 

现在,我想在查询中添加另一个条件以查看表e,f,g,如果表上a.id, b.idx, c.id, d.id 存在任何条件e,f,g,则返回结果。例如,如果c.id存在 one.id那么它应该消除 table 中的行c。如果a.id存在 on g.id,则不应继续,因为如果您a.id从查询中删除 ,则其他部分不应返回任何内容。

我制作了一个示例数据库结构,您可以在此处查看 sql 代码:Sample.sql

4

2 回答 2

2

你的意思是这样的?

SELECT c.value, d.value 
FROM a
LEFT JOIN b
    ON a.id = b.idy
    AND b.id NOT IN (SELECT e.id FROM e UNION ALL SELECT f.id FROM f UNION ALL SELECT g.id FROM g)
LEFT JOIN c
    ON b.idx = c.id
    AND c.id NOT IN (SELECT e.id FROM e UNION ALL SELECT f.id FROM f UNION ALL SELECT g.id FROM g)
LEFT JOIN d
    ON b.idx = d.id
    AND d.id NOT IN (SELECT e.id FROM e UNION ALL SELECT f.id FROM f UNION ALL SELECT g.id FROM g)
WHERE a.name = "test" 
AND a.id NOT IN (SELECT e.id FROM e UNION ALL SELECT f.id FROM f UNION ALL SELECT g.id FROM g)
于 2012-09-21T07:57:46.670 回答
2

不确定您的 SQL 方言,但使用 MySQL,您可以使用:

AND NOT EXISTS(SELECT 1 FROM e WHERE e.idx = b.idx)
于 2012-09-21T07:58:07.733 回答