LEFT JOIN或INNER JOIN从第二张表中的一个表中查找项目

JOIN上有一个简单的问题。

如果我想查找table1中使用的表2中有多少项,我会使用INNER JOIN还是LEFT JOIN(如下所示)。

一个INNER JOIN会向我显示两个表中'ID'的位置,所以应该表示当table1中的ID用于table2时,但是然后列出其中ID与table1 ID(LEFT JOIN)相同的所有table2应该带回相同的?

但结果不同:

INNER JOIN带回252,222 LEFT JOIN带回258,637

PS:table2是table1的子级,因此table2 IDs只能来自table1(table1产品列表,table2是选定产品列表),所以查找table1中所有产品(在table2中选择了该选项)

SELECT DISTINCT 
t1.name, t1.details
FROM 
table1 AS t1
INNER JOIN 
table2 AS t2 ON t1.id = t2.t1_id


SELECT DISTINCT 
t1.name, t1.details
FROM 
table1 AS t1
LEFT JOIN 
table2 AS t2 ON t1.id = t2.t1_id

哪个会提供正确的SQL,我猜INNER JOIN。


LEFT JOININNER JOIN 。 使用LEFT JOIN ,这些行也会返回,但不会出现在第二个表中! 如果你想要那些在第二个表中有ID的记录,则使用INNER JOIN


一个INNER JOIN会向我显示两个表中'ID'的位置,所以应该表示当table1中的ID用于table2时,但是然后列出其中ID与table1 ID(LEFT JOIN)相同的所有table2应该带回相同的?

在这种情况下,INNER JOIN非常有意义,因为它会给table1和table2共同的记录。

table2是table1的子级,所以table2 IDs只能来自table1(table1产品列表,table2是选定产品的列表),所以查找table1中所有产品(在table2中已选定)

这要求您在TABLE2中强制执行FOREIGN KEY约束,即ID只有在TABLE1中存在后才能存在。 一旦你这样做,那就很有道理。


对于左连接,如果结果不满足加入,则结果从table1和table2返回null。 在内部连接的情况下将仅返回满足条件的结果。

链接地址: http://www.djcxy.com/p/86265.html

上一篇: LEFT JOIN or INNER JOIN to find items from one table that are in second table

下一篇: Sybase *= to Ansi Standard with 2 different outer tables for same inner table