我有两个表:tblOrganisations和tblContacts。我有一个带回组织的查询。我还想带回两个与组织相关联的不同类型的联系人(primary = 1,alternate = 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。但我希望每个联系人都有更多字段 - FirstName,LastName,EmailAddress等
我尝试了类似的东西;
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等中的任何内容
感谢您提供任何帮助或指示:)
答案 0 :(得分:2)
具有所需值的表必须连接两次。在这种情况下,它将是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