我正在尝试
SELECT * FROM a, b
但是,如果其中一个表为空,则不会返回任何内容。如何做到这一点,即使另一个是空的,它也会返回'a'?
答案 0 :(得分:21)
在from
子句中使用两个表在功能上等同于cross join
:
select *
from A
cross join
B
这将为B中的每一行返回一行A.当B为空时,结果也为空。您可以使用left join
来解决此问题。使用left join
,即使其中一个表为空,也可以返回行。例如:
select *
from A
left join
B
on 1=1
由于条件1=1
始终为真,因此它与cross join
类似,但它也适用于空表。
答案 1 :(得分:1)
SELECT * FROM a LEFT JOIN b ON a.ID = b.ID
即使b为空,也会返回所有内容。
答案 2 :(得分:1)
你应该进行左连接。
喜欢这个
SELECT *
FROM A
LEFT JOIN B ON A.ID = B.ID
然后你会收到A中的行和B中的相应行(如果存在)。
答案 3 :(得分:1)
SELECT a.*, b.* FROM a LEFT JOIN b ON a.id = b.id
在此示例中,id只是连接键的示例名称
答案 4 :(得分:0)
上面提到的查询显示两个表的连接,如果包含2个记录,b包含7个记录,则显示7 * 2 = 14个记录。在您的情况下,其中一个表为空(有0个记录),它不会显示任何数据。如果您仍想显示数据并且表没有任何关系,则需要检查两个表的计数是否大于0.否则只显示一个非空表的记录。