1

我有以下两个表:A和B

B 包含 A:a_id 的外键。

我有以下查询:

选择a.* 从a内部连接b打开ba_id= aidWHERE b.stuff=1 AND (QueryCheckingDateWithBFields)

我想反转查询,所以我这样做了:

选择a.* 从a内部连接b打开ba_id= aidWHERE b.stuff!=1 OR (!QueryCheckingDateWithBFields)

它工作正常,除了一个问题。我希望我的第一个查询 + 我的第二个查询 = 所有 A 表条目。但是如果没有一个a_ID有一个A的B,这个A就不会被选中。我怎么能说“我也想要没有加入的A?”

4

2 回答 2

4

使用 aleft outer join而不是inner joinand 调整您的where子句以支持没有 的情况B

SELECT a.* FROM a LEFT OUTER JOIN b ON b.a_id = a.id
WHERE b.id == null OR (b.stuff = 1 AND (QueryCheckingDateWithBFields))

SELECT a.* FROM a LEFT OUTER JOIN b ON b.a_id = a.id
WHERE b.id == null OR b.stuff != 1 OR (!QueryCheckingDateWithBFields)
于 2013-02-26T10:48:24.090 回答
2

使用 LEFT JOIN 而不是 INNER JOIN

于 2013-02-26T10:49:30.110 回答