2016-11-15 91 views
-1

我在我的数据库中的两个表从表中选择,如果其他表指向记录

---------    --------- 
| A |    | B | 
|---------|    |---------| 
| id  |    | id  | 
| name |    | a_id | 
---------    | name | 
         --------- 

我要选择表A所有记录只有在有表B记录指向记录在表AB.a_id = A.id)中。

我该如何做到这一点?我想要一个解释,所以我明白它是如何完成的。

+0

...其中id在(select ... from b) – jarlh

+0

我觉得这个问题很愚蠢......我正在从别人那里开始一个非常古老的项目。在将这个问题提交给内部联接解决方案之前,我改变了查询,但它没有任何影响。原来,他通过ajax调用重新填充了列表框(带有sql查询的结果)。所以不管我做了什么,结果都是一样的。 :/ – justijn

回答

1

使用INNER JOIN

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子句指示它从表AA.*)只返回列,但因为JOIN的,在A排在B匹配多于一行。 DISTINCT子句注意避免在结果集中多次使用相同的输出行。

+0

DISTINCT还会无意中删除重复的A行(如果有的话)。 – jarlh

0
SELECT * 
FROM a 
WHERE id IN (SELECT a_id from b) 
0

这是一个基本INNER JOIN

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

内部联接将选择从那里是在连接标准(在ON运营商)匹配指定的表(S)的所有记录。

+0

如果在b中找到两次相同的id,将返回重复的行。 – jarlh

相关问题