2013-02-16 113 views
0

我一直在尋找小時,但無法找到解決方案。它有點複雜,所以我會分解成一個非常簡單的例子mysql左連接重複

我有兩個表;人與車

人:

name_id firstname 
    1   john 
    2   tony 
    3   peter 
    4   henry 

汽車:

name_id car_name 
    1  vw gulf 
    1  ferrari 
    2  mustang 
    4  toyota 

可以看出,它們是由名_ID聯繫,John有2輛,託尼1,彼得0亨利有1.

我只是想做一個單一的mysql搜索誰有(1或更多)車。所以,應該是john,tony,henry。

people表是主表,im用LEFT JOIN來添加汽車。我的問題來自重複。事實表im加入有2個條目爲主ID中的1個ID。

即時玩DISTINCTGROUP BY但我似乎無法得到它的工作。

任何幫助,非常感謝。

編輯:添加查詢:

$query = " 
SELECT profiles.*, invoices.paid, COUNT(*) as num 
FROM profiles 
    LEFT JOIN invoices ON (profiles.id=invoices.profileid) 
WHERE (profiles.id LIKE '%$id%') 
GROUP BY invoices.profileid 
"; 
+0

查詢示例與問題無關。如果您的問題已經有查詢,請解釋它有什麼問題。 – Bulat 2013-02-16 21:13:34

回答

0
SELECT DISTINCT firstname 
FROM people 
    JOIN cars ON cars.name_id = people.name_id; 

如果不工作,你可能會向我們展示了完整的問題。

建議它的方式不需要左連接,因爲您至少需要每人一輛車。左連接隱式是一個OUTER連接,用於返回連接表中0個相應記錄的結果。

+0

這裏是我的計數查詢。 (發票是汽車和配置文件是人)$ query =「SELECT profiles。*,invoices.paid,COUNT(*)as num FROM profiles LEFT JOIN invoices ON(profiles.id = invoices.profileid) WHERE(profiles。 id LIKE'%$ id%') GROUP BY invoices.profileid「; – Lan 2013-02-16 19:10:28

0

試試這個
select distinct p.name_id, firstname from people p, cars c where p.name_id = c.name_id

或使用加入
select distinct p.name_id, firstname from people p inner join cars c on p.name_id = c.name_id

0

如果你只是想表明,有車的人,那麼你應該使用一個RIGHT JOIN。如果他們在汽車表中沒有匹配,這將停止左表(人員)返回的任何結果。

按人名分組以刪除重複項。

SELECT firstname 
FROM people P 
RIGHT JOIN cars C ON C.name_id = P.name_id 
GROUP BY firstname