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

时间:2012-10-19 14:32:01

标签: mysql join left-join inner-join

我对JOINS有一个简单的问题。

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

INNER JOIN会告诉我ID' ID'在两个表中,所以应该表示在table2中使用table1的ID,但是然后列出所有table2,其中ID与table1 ID(LEFT JOIN)相同应该带回来吗?

但结果不同:

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

PS:table2是table1的子项,因此table2 ID只能来自table1(table1是产品列表,table2是所选产品的列表)所以要查找table1中所有选中产品的产品(已被选中)

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。

3 个答案:

答案 0 :(得分:2)

LEFT JOININNER JOIN不同。使用LEFT JOIN,也返回那些在第二个表中不存在的行!如果您想要那些在第二个表格中也有ID的记录,请使用 INNER JOIN

答案 1 :(得分:2)

  

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

在这种情况下,INNER JOIN非常有意义,因为它会为table1和table2提供通用记录。

  

table2是table1的子项,因此table2 ID只能来自table1(table1是产品列表,table2是所选产品的列表),因此查找table1中所有选中产品的产品(已选中)< / p>

这要求您在TABLE2中强制FOREIGN KEY约束,ID只有在TABLE1中存在后才能出现。一旦你这样做,那就有意义了。

答案 2 :(得分:0)

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