一个查询连接来自一个表中的多行
问题描述:
好吧,所以我在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。
非常感谢帮助。提前致谢。
答
要避免遇到相同的电话号码两次,你可以改变这一点:
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,1或2%的客户的电话号码,然后?如果有的话Max
和Min
行吗?这将为您节省加入。
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;
答
你想要做的是去除数字相同的情况。
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
这是完美的。我投票给你,然后试图接受答案,但它说我不得不等待9分钟。我会尽快完成。谢谢,马克。 – Chris 2010-12-01 23:38:08
@thejew - 您不需要为此连接两次电话表。 – 2010-12-01 23:45:21