关于MySQL:如果其他表指向记录,则从表中选择

Select from table if other table points to record

本问题已经有最佳答案,请猛点这里访问。

我的数据库中有两个表

1
2
3
4
5
6
7
 ---------               ---------
|    A    |             |    B    |
|---------|             |---------|
| id      |             | id      |
| name    |             | a_id    |
 ---------              | name    |
                         ---------

我只想在表B中有一条指向表A中的记录(B.a_id = A.id中的记录)的情况下选择表A中的所有记录。

我怎样才能做到这一点?我想要一个解释,这样我就能理解它是怎么做到的。


使用INNER JOIN

1
2
3
SELECT DISTINCT A.*
FROM A
    INNER JOIN B ON B.a_id = A.id

由于INNER JOIN,对于表A中的每一行,mysql查找B中符合JOIN条件(B.a_id = A.id的所有行。

SELECT子句指示它只返回表A(A.*)中的列,但由于JOINA中的一行可以匹配B中的多行。DISTINCT子句注意避免在结果集中多次具有相同的输出行。


这是一个基本的INNER JOIN

1
2
3
SELECT a.*
FROM a
INNER JOIN b ON a.ID = b.a_ID

内部联接将从指定表中选择所有与联接条件匹配的记录(ON运算符)。


1
2
3
SELECT *
FROM a
WHERE id IN (SELECT a_id from b)