我一直在寻找几个小时,但无法找到解决方案。它有点复杂,所以我将其分解为一个非常简单的例子
我有两张桌子;人和车人:
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个条目。
我正在玩DISTINCT
和GROUP 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 :(得分: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