从表中选择两个项目作为两个不同的东西

时间:2016-04-23 01:13:51

标签: mysql sql

我有两个表: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等中的任何内容

感谢您提供任何帮助或指示:)

1 个答案:

答案 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