我有以下两个表:A和B
B包含A:a_id。
的外键我有以下查询:
SELECT
a
。* FROMa
INNER JOINb
ONb
。a_id
=a
。id
WHERE b.stuff = 1 AND(QueryCheckingDateWithBFields)
我想反转查询,所以我这样做了:
SELECT
a
。* FROMa
INNER JOINb
ONb
。a_id
=a
。id
WHERE b.stuff!= 1 OR(!QueryCheckingDateWithBFields)
除一个问题外,它工作正常。我希望我的第一个查询+我的第二个查询=所有A表条目。但如果没有带有a_ID
A的B,则不会选择此A.我怎么能说“我也想要一个没有加入的A?”
答案 0 :(得分:4)
使用left outer join
代替inner join
并调整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)
答案 1 :(得分:2)
使用LEFT JOIN而不是INNER JOIN