1
假设存在联系人并且每个联系人都有一个或零个Sms记录的假示例;我可以做到这一点具有多个列的MySQL子状态
SELECT Contact.id, Contact.name, Sms.provider, Sms.number FROM Contact, Sms WHERE Sms.contactId = Contact.id.
但我需要显示一个行,即使没有该联系人的短信号码。
我知道有两种方法可以实现这一点。一个是具有两个选择
(SELECT Contact.id, Contact.name, Sms.provider, Sms.number FROM Contact, Sms WHERE Sms.contactId = Contact.id) UNION (SELECT id, name, null provider, null number FROM Contact WHERE (SELECT 1 FROM Sms WHERE contactId = Contact.id) IS NULL).
和另一个的UNION是二substatements
SELECT id, name, (SELECT provider FROM Sms WHERE contactId = Contact.id) provider, (SELECT number FROM Sms WHERE contactId = Contact.id) number FROM Contact
的UNION方法需要通过数据库去两次,substatements方法需要在同一个表中的两个查找。
我经常遇到这种情况,我更喜欢MySQL中的所有代码,而不是使用软件代码来完成此操作。使用MySQL通常变得更加高效和简单。我所处理的许多实际情况都涉及大型数据库。
有没有办法从一个查询中获取相关表中的两个字段?
工程就像一个魅力!谢谢。值得注意的是,这将显示没有短信的联系人,但不会显示没有联系人的短信,因为联系人是左侧和起点。 – 2011-02-10 00:31:04