我没有得到ref_id
零件...它是外键吗?或者那是Email_Company_Contact_Ref
表的主键?
我认为您希望将表格的参考放在Email
和Company
表格Contact
中。如果您需要为他们发送多个电子邮件,那么您应该创建两个连接表:Company_Email
和Contact_Email
. 您当前的设计(将表名作为列值的引用)是糟糕的 SQL 设计——仅仅因为像 RoR 这样的东西促进了它,它不会变得更好。
通过适当的设计,该复杂查询的等价物将如下所示:
CREATE TABLE Company_Email (company_id integer, email_address varchar(100),
FOREIGN KEY company_id REFERENCES Company (id));
CREATE TABLE Contact_Email (contact_id integer, email_address varchar(100),
FOREIGN KEY contact_id REFERENCES Contact (id));
SELECT email_address, 'Company' AS kind, company_name AS name
FROM Company_Email ce JOIN Company c ON company_id = c.id
UNION
SELECT email_address, 'Contact', contact_name
FROM Contact_Email ce JOIN Contact c ON contact_id = c.id;
如果您无法更改它,则必须按照 Barmar 解释的方式执行 UNION。
或者,您可以SELECT DISTINCT
从左连接查询中删除重复项。