Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL中一个表为空时选择多个表_Sql_Mysql - Fatal编程技术网

MySQL中一个表为空时选择多个表

MySQL中一个表为空时选择多个表,sql,mysql,Sql,Mysql,我正在努力 SELECT * FROM a, b 但是,如果其中一个表为空,它不会返回任何内容。如何使它返回“a”,即使另一个为空?在from子句中使用两个表在功能上等同于交叉联接: select * from A cross join B 这将为B中的每一行返回一行a。当B为空时,结果也为空。您可以通过使用左连接来修复此问题。使用左联接,即使其中一个表为空,也可以返回行。例如: select * from A left join B o

我正在努力

SELECT * FROM a, b

但是,如果其中一个表为空,它不会返回任何内容。如何使它返回“a”,即使另一个为空?

from
子句中使用两个表在功能上等同于
交叉联接:

select  *
from    A
cross join
        B
这将为B中的每一行返回一行a。当B为空时,结果也为空。您可以通过使用
左连接来修复此问题。使用
左联接
,即使其中一个表为空,也可以返回行。例如:

select  * 
from    A
left join  
        B
on      1=1
由于条件
1=1
始终为真,这就像
交叉连接
一样,只是它也适用于空表

SELECT * FROM a LEFT JOIN b ON a.ID = b.ID

即使b为空,也将从a返回所有内容。

您应该执行左联接

像这样

SELECT *
FROM A
 LEFT JOIN B ON A.ID = B.ID

然后您将收到A中的行和B中的相应行(如果存在)。

上述查询显示两个表的联接。如果A包含2条记录,B包含7条记录,则显示7*2=14条记录。在您的情况下,其中一个表为空(包含0条记录),它将不显示任何数据。如果仍要显示数据且表没有任何关系,则需要检查两个表的计数是否大于0。否则,只显示一个非空表中的记录

SELECT a.*, b.* FROM a LEFT JOIN b ON a.id = b.id 

在这个示例中,id只是join key的示例名称

您使用的是
内部连接
的形式,结果是x*y记录,因此如果其中一个记录有0行,那么x*0=0.FYI,“在MySQL中,交叉连接在语法上等同于内部连接(它们可以相互替换)”@Imre L:interest。如果在
子句上没有
的话,按照惯例使用
交叉连接
可能更清晰,即使MySQL允许
内部连接
用于相同的目的!对我个人更喜欢省略单词
internal
CROSS
,等等。但我不喜欢在联接表上使用某些条件时使用内联交叉联接。如果在表a上使用返回0行的WHERE子句(表不是空的),则不起作用。我也试着在表A和表B之间切换,但仍然没有返回任何记录。如果假设有字段要连接,则可能没有公共字段。如果没有公共字段,这将无法工作。请参见答案中的ON 1=1。假设有字段要连接,可能没有公共字段。如果没有公共字段,这将无法工作。请参见答案中的ON 1=1。假设有字段要连接,可能没有公共字段。如果没有公共字段,这将无法工作。请参见答案中关于1=1的说明。这是整个问题的关键,在没有公共字段的情况下连接空集。是的,你是对的,在这种情况下,需要交叉连接,或者条件1=1几乎相同。