MySQL 2 LEFT JOIN来自同一个表

时间:2011-10-23 09:00:33

标签: mysql left-join

我将客户电话和传真号码保存在同一个数据库表中。哪个没有异常。 并非所有客户都有电话号码,而其他客户没有传真号码。

我需要查看电话和传真,即使它们是空的。 在tbl_customers表格中,我有2个专门用于记录默认电话和默认传真的列。他们只是存储来自tbl_phonenumbers的记录ID。

这是电话:

SELECT c.customername, p.phonenumber
FROM `tbl_customers` c
LEFT JOIN `tbl_phonenumbers` p ON c.customerid = p.customerid
WHERE c.defaultphone = 22

现在我需要添加默认的faxnumber id,它与默认手机的想法相同。

我不太确定如何解决这个问题。当然,我可以创建一个名为'tbl_faxnumbers`的全新数据库表,并为此创建LEFT JOIN。但我宁愿为电话和传真号码保留一张表。

这是LEFT JOIN的可能性吗?

2 个答案:

答案 0 :(得分:2)

您可以多次加入同一个表,只要每个联接都有一个唯一的别名,这样DB服务器就可以找出您正在讨论的表的那些额外版本的内容:

SELECT ...
FROM maintable
JOIN othertable AS copy1 ON copy1.somefield = ...
JOIN othertable AS copy2 ON copy2.somefield = ...

对于您的情况,我会在电话号码表中添加“类型”标识符字段,以便您可以指出哪个是电话号码,哪个是传真号码。那你就做了你的联接:

SELECT ..., phones.phonenumber, faxes.phonenumber
...
JOIN tbl_phonenumbers AS phones ON (... = phones.id) AND (phones.type = 'phone')
JOIN tbl_phonenumbers AS faxes ON (... = faxes.id) AND (faxes.type = 'fax');

答案 1 :(得分:0)

为什么不在tbl_phonemumbers上添加一个faxnumber字段?