一个查询从一个表连接多个行

时间:2010-12-01 23:30:51

标签: mysql join left-join

好的,我在MySQL中有两个表。一个表保存客户信息,另一个表保存电话号码。我需要在一个查询中加入这些表,从电话表中选择最多两个电话号码以及客户信息。现在我的查询是:

SELECT customers.name, phones.phone, phones2.phone 
FROM customers 
LEFT JOIN phones ON phones.customerid=customers.id 
LEFT JOIN phones AS phones2 ON phones2.customerid=customers.id 
GROUP BY customers.id;

然而,这会为手机1和手机2返回相同的电话号码。基本上我需要做的是将手机2偏移1,但我不知道如何在语法上做到这一点。

手机在一个单独的表中,因为它是一对多的关系。

我需要将它放在一个查询中,因为我将它直接导出到csv。

非常感谢帮助。提前谢谢。

3 个答案:

答案 0 :(得分:3)

您只想为每位客户提供0,1或2个电话号码吗?如果是MaxMin好吗?这将为您节省一次加入。

SELECT customers.name, 
       MAX(phones.phone) AS phone, 
       CASE WHEN MAX(phones.phone) = MIN(phones.phone) THEN NULL ELSE MIN(phones.phone) END AS phone2
FROM customers 
LEFT JOIN phones ON phones.customerid=customers.id 
GROUP BY customers.id;

答案 1 :(得分:1)

为避免两次获得相同的电话号码,您可以更改此信息:

LEFT JOIN phones AS phones2 ON phones2.customerid=customers.id 

对此:

LEFT JOIN phones AS phones2 ON phones2.customerid=customers.id
AND phones2.phone <> phones.phone

答案 2 :(得分:1)

你想要的是删除数字相同的情况。

SELECT customers.name, phones.phone, phones2.phone 
FROM customers 
LEFT JOIN phones ON phones.customerid=customers.id 
LEFT JOIN phones AS phones2 ON phones2.customerid=customers.id 
WHERE phones2.phone != phones.phone
GROUP BY customers.id