我在数据库中有两个表,a
& b
。
表b
有一个引用a
上的列的外键。
我正在尝试弄清楚如何从b
获取一行,其中所有列都来自相应的a
。但是,并非b
的所有行都会在a
中包含相应的行。
以下SQL将返回b
中a
中包含两个表中所有列的相应行的所有行。
"SELECT * FROM b INNER JOIN a ON b.foo = a.foo
但我只想要一行,其中b.foo
等于某个值,其中来自a(如果有)的相应列。
所以,天真地:
"SELECT * FROM b INNER JOIN a ON b.foo = a.foo WHERE b.foo = 'some value'
问题是,这有时不会返回任何行,因为a
中可能没有相应的行。但我们保证b
中的某些行存在b.foo
等于some value
,并且应始终返回。
是否有一个SQL命令始终可以返回b中的一行(假设b
中的行存在),或者a
中的相应列,或者相应的a
是否存在不存在,只有b
中的列?
答案 0 :(得分:4)
是的,如果您将INNER JOIN
更改为LEFT OUTER JOIN
,您将始终接收b
行,并且a
列值将为NULL如果没有找到匹配的行。