我试图用下面的sql语句来查询2个表,试图从每个包含特定id的表中返回所有记录。从多个表中重复SQL SELECT列而不重复数据
SELECT Phone.Phone, Email.Email FROM Contacts.Phone, Contacts.Email
WHERE Phone.ContactId = :contactId AND Email.ContactId = :contactId
Contacts.Phone
表包含2个指定编号的电话号码和Contacts.Email
包含给定ID 1个电子邮件。使用上面的sql查询,我得到以下行返回。当然,这仅仅是一个例子,其中每个表的结果集在行数上匹配。
Row 1: 555-555-5555 - [email protected]
Row 2: 666-666-6666 - [email protected]
电子邮件被重复,以填补在第二排,当我试图让:
Row 1: 555-555-5555 - [email protected]
Row 2: 666-666-6666 - NULL
我想我需要使用UNION
以某种方式加入表,但我可以不知道如何编写sql语句。另一个选择是执行2个单独的SQL查询,这将更容易,但我认为性能明智的做法是在一个查询中收集所需的所有数据。
我正在使用MySQL。
我想你需要'LEFT JOIN'电子邮件表。 – favoretti
@ryandlf您有一个联系人ID有2个(或更多)电话号码,并且可以有一个联系人ID有2个(或更多)电子邮件? – Nalaka526
我想你会想要使用两个子查询,每个都有一些ROWNUM/rank/row_number变体,并在该字段上执行完整的外连接。对于一个特定的查询,你必须告诉我们你正在使用的是什么RDBMS(MySQL?Oracle?SQL Server?PostgreSQL?其他?)。这就是说,我认为你的陈述“表现明智,最好是在一个查询中收集我需要的所有数据”是错误的。一个拉* n *行的查询优于每个拉一行的* n *查询,但没有理由将两个逻辑分离的查询合并为一个。 – ruakh