2010-12-01 90 views
1

好吧,所以我在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基本上就是我需要做的是通过偏移1 phones2,但我不知道该怎么做语法。

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

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

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

回答

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 
+0

这是完美的。我投票给你,然后试图接受答案,但它说我不得不等待9分钟。我会尽快完成。谢谢,马克。 – Chris 2010-12-01 23:38:08

+0

@thejew - 您不需要为此连接两次电话表。 – 2010-12-01 23:45:21

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

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

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 
相关问题