-1

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

我有两张桌子;人和汽车

人们:

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 链接的,john 有 2 辆汽车,tony 有 1 辆,peter 有 0 辆,henry 有 1 辆。

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

people 表是主表,我LEFT JOIN用来添加汽车。我的问题来自重复。事实上,我加入的表在主服务器中有 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
";
4

3 回答 3

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

于 2013-02-16T19:02:23.517 回答
0
SELECT DISTINCT firstname 
FROM people 
    JOIN cars ON cars.name_id = people.name_id;

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

提出它的方式不需要左连接,因为您每人至少需要一辆车。左连接隐含地是一个外连接,旨在返回连接表中具有 0 个对应记录的结果。

于 2013-02-16T18:56:23.557 回答
0

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

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

SELECT firstname
FROM people P
RIGHT JOIN cars C ON C.name_id = P.name_id
GROUP BY firstname
于 2013-02-16T19:06:50.993 回答