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

LEFT JOIN or INNER JOIN to find items from one table that are in second table

我有一个关于加入的快速问题。

如果我想找出表1中有多少项在表2中使用,我会使用内部联接还是左联接(下面的SE)。

内部联接将显示两个表中的"id"在哪里,因此应表示表1中的id在表2中的使用时间,但随后列出所有表2,其中id与表1中的id相同(左联接)应返回相同的值?

但结果不同:

内部连接返回25222左连接返回258637

ps:Table2是Table1的子级,因此Table2 ID只能来自Table1(Table1是产品列表,Table2是所选产品列表),因此查找从Table1中选择的所有产品,以便在Table2(已选择)中选择。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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,我猜是内部连接。


An INNER JOIN would show me where 'ID' is in both tables so should represent when ID from table1 is used in table2, but then listing all table2 where ID is the same as table1 ID (LEFT JOIN) should bring back the same?

在这种情况下,内部连接非常有意义,因为它将为表1和表2提供通用的记录。

table2 is a child of table1, so table2 IDs can only be from table1 (table1 a list of products, table2 a list of selected products) so looking for all products from table1 that are seleted so in table2 (been selected)

这要求您在表2中强制执行FOREIGN KEY约束,即ID只能在表1中存在之后才能存在。一旦你这样做了,那就有意义了。


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


对于左联接,如果结果不满足联接,则从表1和表2返回结果空值。在内部联接的情况下,只返回满足条件的结果。