我有两个表:tblOrganizations 和 tblContacts。我有一个带回组织的查询。我还想带回与组织相关的两个不同类型的联系人(主要 = 1,备用 = 2)。但是,我一直困惑于如何从一张表中将多个联系人的多个字段作为不同的内容返回。
到目前为止,我可以获得他们的 ReferenceID 作为 PrimaryID 和 secondaryID。
SELECT tblOrganisations.*
, ( SELECT tblContacts.ReferenceID
FROM tblContacts
WHERE tblOrganisations.ReferenceID = tblContacts.tblOrganisations_ReferenceID
AND tblContacts.tblContactTypes_ReferenceID = 1
) AS PrimaryID
, ( SELECT tblContacts.ReferenceID
FROM tblContacts
WHERE tblOrganisations.ReferenceID = tblContacts.tblOrganisations_ReferenceID
AND tblContacts.tblContactTypes_ReferenceID = 2
) AS SecondaryID
FROM tblOrganisations
上面的查询从 tblContacts 中获取组织及其联系人的 ReferenceID,作为我想要的两种不同类型的联系人的 PrimaryID 和 secondaryID。但我想要每个联系人有更多字段 - 名字、姓氏、电子邮件地址等
我尝试过类似的东西;
SELECT tblOrganisations.*
,
( SELECT tblContacts.ReferenceID AS PrimaryID ,
FirstName AS PrimaryFirstName
FROM tblContacts
WHERE tblOrganisations.ReferenceID = tblContacts.tblOrganisations_ReferenceID
AND tblContacts.tblContactTypes_ReferenceID = 1
)
,
( SELECT tblContacts.ReferenceID AS SecondaryID ,
FirstName AS SecondaryFirstName
FROM tblContacts
WHERE tblOrganisations.ReferenceID = tblContacts.tblOrganisations_ReferenceID
AND tblContacts.tblContactTypes_ReferenceID = 2
)
FROM tblOrganisations
但这实际上并没有返回 PrimaryID、SecondaryID、PrimaryFirstName 等中的任何内容
感谢您的帮助或指点:)
最佳答案
具有所需值的表必须连接两次。在本例中它将是 tblcontacts。
SELECT
o.*,
c1.referenceid AS PrimaryID,c1.firstname as primaryfirstname,
c2.referenceid AS SecondaryID,c2.firstname as secondaryfirstname
FROM tblOrganisations o
JOIN tblContacts c1 on o.ReferenceID = c1.tblOrganisations_ReferenceID
JOIN tblContacts c2 on o.ReferenceID = c2.tblOrganisations_ReferenceID
WHERE c1.tblContactTypes_ReferenceID = 1 and c2.tblContactTypes_ReferenceID = 2
关于mysql - 从表中选择两个项目作为两个不同的事物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36805489/