簡體   English   中英

我的聯接返回太多行

[英]I have a join that is returning too many rows

我正在做一個MySQL聯接,我只想獲取LMSCDonationLetterNeeded值為1的記錄。但是,正在發生的事情是,我返回的是7行而不是3行。而且,當執行查詢時,不准確時,稱為LMSCDonationLetterNeeded的值都為1。

我有下面的3個表:

Registristration
-------------------
SwimmerID RegNumber    TransactionID  LMSCDonationLetterNeeded  RegistrationDate
HYDR0     3881-HYDR0   0123-0001      0                         11/25/2015
HYDR0     3882-HYDR0   0123-0048      1                         04/15/2018
97SSN     3880-97SSN   0124-0022      0                         01/01/2016
97SSN     3881-97SSN   0124-0068      0                         03/20/2017
97SSN     3882-97SSN   0124-0084      1                         04/02/2018
06HM5     388K-06HM5   0126-0011      0                         02/02/2015
06HM5     388J-06HM5   0126-0056      1                         03/02/2018

People
-------------------
SwimmerID     FirstName  LastName
HYDR0         John       Smith
97SSN         Jim        Johnson
06HM5         Susan      Korver


FinTransactions
--------------------
SwimmerID  RegistrationNum  TransactionID   LMSCDonateAmt    FinTransactions
HYDR0      3881-HYDR0       0123-0001       10.00            11/25/2015
HYDR0      3882-HYDR0       0123-0048       15.00            04/15/2018
97SSN      3880-97SSN       0124-0022       05.00            01/01/2016
97SSN      3881-97SSN       0124-0068       25.00            03/20/2017
97SSN      3881-97SSN       0124-0084       10.00            04/02/2018
06HM5      388K-06HM5       0126-0011       05.00            02/02/2015
06HM5      388J-06HM5       0126-0056       35.00            03/02/2018

我的查詢返回太多行如下:

SELECT          Registration.LMSCDonationLetterNeeded,
                FinTransactions.LMSCDonateAmt,
                Registration.RegNumber,
                Registration.SwimmerID,
                People.FirstName,
                People.MI,
                People.LastName,
                People.Suffix,
                People.Address1,
                People.City,
                People.StateAbbr, 
                People.Zip,
                People.Country AS CountryCode,
                Countries.Country,
                DATE_FORMAT(FinTransactions.FinTrxDateTime, '%m/%d/%Y') AS DonationDate,
                LMSCs.Name AS LMSCName,
                Registration.LMSCID,
                LMSCOfficers.FirstName AS RegistrarFirstName,
                LMSCOfficers.LastName AS RegistrarLastName,
                Aliases.EMailAlias AS RegistrarEMail
            FROM
                Registration
                LEFT JOIN People USING (SwimmerID)
                LEFT JOIN FinTransactions ON FinTransactions.SwimmerID = Registration.SwimmerID
                LEFT JOIN LMSCs ON LMSCs.LMSCID = Registration.LMSCID
                LEFT JOIN LMSCOfficers ON LMSCOfficers.LMSCID = Registration.LMSCID AND LMSCOfficers.OfficeID = 5
                LEFT JOIN Aliases ON LMSCOfficers.AliasID = Aliases.AliasID
                LEFT JOIN Countries ON People.Country = Countries.CountryCode
            WHERE
                Registration.LMSCDonationLetterNeeded = 1
                AND Registration.LMSCID = 38
                AND Registration.RegNumber IN ("3881-HYDR0", "3880-97SSN", "388K-06HM5")
            ORDER BY
                People.LastName,
                People.FirstName,
                People.MI

任何幫助將不勝感激。

試試這個解決方案:

SELECT Registration.LMSCDonationLetterNeeded,
       FinTransactions.LMSCDonateAmt,
       Registration.RegNumber,
       Registration.SwimmerID,
       People.FirstName,
       People.MI,
       People.LastName,
       People.Suffix,
       People.Address1,
       People.City,
       People.StateAbbr, 
       People.Zip,
       People.Country AS CountryCode,
       Countries.Country,
       DATE_FORMAT(FinTransactions.FinTrxDateTime, '%m/%d/%Y') AS DonationDate,
       LMSCs.Name AS LMSCName,
       Registration.LMSCID,
       LMSCOfficers.FirstName AS RegistrarFirstName,
       LMSCOfficers.LastName AS RegistrarLastName,
       Aliases.EMailAlias AS RegistrarEMail
FROM
Registration
LEFT JOIN People 
USING (SwimmerID)
LEFT JOIN FinTransactions 
ON FinTransactions.SwimmerID = Registration.SwimmerID 
AND FinTransactions.RegistrationNum = Registration.RegNumber   -- Added this condition
LEFT JOIN LMSCs 
ON LMSCs.LMSCID = Registration.LMSCID
LEFT JOIN LMSCOfficers 
ON LMSCOfficers.LMSCID = Registration.LMSCID 
AND LMSCOfficers.OfficeID = 5
LEFT JOIN Aliases 
ON LMSCOfficers.AliasID = Aliases.AliasID
LEFT JOIN Countries 
ON People.Country = Countries.CountryCode
WHERE Registration.LMSCDonationLetterNeeded = 1
      AND Registration.LMSCID = 38
      AND Registration.RegNumber IN ("3881-HYDR0", "3880-97SSN", "388K-06HM5")
ORDER BY People.LastName,
         People.FirstName,
         People.MI

說明:

在“ ON條件中加入表RegistristrationFinTransactions ,您沒有提到一個條件,即FinTransactions.RegistrationNum = Registration.RegNumber

暫無
暫無

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

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