[英]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
條件中加入表Registristration
和FinTransactions
,您沒有提到一個條件,即FinTransactions.RegistrationNum = Registration.RegNumber
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.