mysql左连接重复

时间:2013-02-16 18:53:33

标签: mysql sql

我一直在寻找几个小时,但无法找到解决方案。它有点复杂,所以我将其分解为一个非常简单的例子

我有两张桌子;人和车

人:

name_id    firstname
  1          john
  2          tony
  3          peter
  4          henry

汽车:

name_id   car_name
   1      vw gulf
   1      ferrari
   2      mustang
   4      toyota

可以看出,他们是通过name_id链接的,约翰有2辆车,tony有1辆,彼得有0辆,亨利有1辆。

我只想对拥有(1个或更多)汽车的人进行单一的mysql搜索。所以anwser应该是john,tony,henry。

人员表是主表,我使用LEFT JOIN来添加汽车。我的问题来自重复。表im加入在master中有1个id的2个条目。

我正在玩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
";

3 个答案:

答案 0 :(得分:0)

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

如果这不起作用,您可能需要向我们展示完整的问题。

建议它的方式不需要左连接,因为你每人至少需要一辆车。左连接显然是一个OUTER连接,用于在连接表中返回0对应记录的结果。

答案 1 :(得分: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

答案 2 :(得分:0)

如果您只想向有车的人展示,那么您应该使用RIGHT JOIN。如果左表(人)在汽车表中没有匹配,这将停止返回任何结果。

按人名分组以删除重复项。

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