2016-11-15 94 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

相關問題