簡體   English   中英

SQL多行但只有一行

[英]SQL Multiple rows but one expected

我用連接得到以下查詢:

SELECT i.PropertyCodeId, i.IndividualCode, i.LastName, 
       i.Firstname, i.AccountCode, acc.Name AS AccountName,
       (SELECT value 
        FROM Relation.ContactDetail AS cd 
        WHERE cd.ContactDetailTypeCode = 'EMAIL' 
              AND cd.RelationCode = i.IndividualCode) AS Email,
       adr.City, adr.ZipCode, adr.StateCode, adr.CountryCode, 
       'undefined' AS MemberShipID, i.TierCode AS MemberShipTier,
       i.VipCode, i.Active, i.PrimaryRoleCode
FROM Relation.Individual AS i
    INNER JOIN Relation.Account AS acc ON i.AccountCode = acc.AccountNumber
    LEFT OUTER JOIN Relation.ContactDetail AS cd ON i.IndividualCode = cd.RelationCode
    INNER JOIN Relation.Address AS adr ON i.IndividualCode = adr.RelationCode

我的問題是關於這個聲明:

(SELECT value FROM Relation.ContactDetail AS cd WHERE cd.ContactDetailTypeCode = 'EMAIL' AND cd.RelationCode = i.IndividualCode) AS Email,

運行此語句將導致1行,但在大查詢中運行它會產生4行,它還會顯示不是EMAIL的ContactTypes的記錄。

有誰知道我做錯了什么? :(

select之后的列中的子查詢對返回的行數沒有影響。 如果用'hello'替換子查詢,您將看到查詢仍然返回4行。

查找join語句中四行的原因。 您通常可以逐個省略連接以找到罪魁禍首。

您正在執行子查詢的同一個表上執行左連接,但左連接條件缺少限制:cd.ContactDetailTypeCode ='EMAIL'

添加此項可能會解決您的問題。 也許你也可以刪除子查詢,只需直接從連接表中選擇

SELECT i.PropertyCodeId, i.IndividualCode, i.LastName, 
   i.Firstname, i.AccountCode, acc.Name AS AccountName,
   cd.value AS Email,
   adr.City, adr.ZipCode, adr.StateCode, adr.CountryCode, 
   'undefined' AS MemberShipID, i.TierCode AS MemberShipTier,
   i.VipCode, i.Active, i.PrimaryRoleCode
FROM Relation.Individual AS i
INNER JOIN Relation.Account AS acc ON i.AccountCode = acc.AccountNumber
LEFT OUTER JOIN Relation.ContactDetail AS cd ON (i.IndividualCode = cd.RelationCode AND cd.ContactDetailTypeCode = 'EMAIL')
INNER JOIN Relation.Address AS adr ON i.IndividualCode = adr.RelationCode

如果你的LEFT OUTER JOIN返回的行多於一行,那么基本表(Relation.Individual)中的行就會成倍增加。

運行此語句將導致1行,但在大查詢中運行它會產生4行,它還會顯示不是EMAILContactTypes的記錄。

也許可能是因為你在錯誤的地方做了LEFT OUTER JOIN ,或者LEFT OUTER JOIN應該是INNER JOIN

如果使用LEFT JOIN注意哪些表是對的兩側LEFT JOIN ,因為左側表的所有行會在結果集。 也許你應該將LEFT JOIN設置為第一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM