2013-02-16 86 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