簡體   English   中英

如何從一個表中選擇與表中的列值相匹配的數據?

[英]How do I select data from one table where column values from that table match the conatenated column values of another table?

表客戶

id     fName        lName      pNumber
 1     Adeline      Brown      55512300
 2     May          Green      55512094 

表會計

id     customerName       datePaid        amount
1      Brown, Adeline     2012-08-09      210
2      Green, May         2012-09-09      430   

我的問題是,我該如何選擇pNumber基礎上, datePaid對應的customerName

您應該從“計費”表中刪除“ customerName ”,然后將其替換為“ CustomerId 但是,現在,您可以使用任何謂詞作為JOIN條件來JOIN兩個表,如下所示:

SELECT c.pNumber
FROM Customers c
INNER JOIN accounting ac ON c.fName + ', ' + p.lName = ac.customerName

您的表Accouting結構的問題在於,它沒有 規范化 ,特別是不符合第三個范式3NF

3NF:消除不依賴於鍵的列

Accounting表中的customerName列不依賴於該表的Accounting id 因此,您的表應如下所示:

客戶表:

  • idfNamelNamepNumber

會計表:

  • idcustomerId外鍵引用Customers(Id)datePaidamount

然后,您可以將兩個表直接JOINON customerId ,這將大大提高性能:

SELECT c.pNumber
FROM Customers c
INNER JOIN accounting ac ON c.Id = ac.CustomerId

編輯:您的查詢中沒有錯。 可能是您沒有符合此條件的任何行。 您可以嘗試以下查詢,該查詢與您編寫的查詢相同,但更具組織性:

SELECT c.pNumber 
FROM customers c 
INNER JOIN
(
    SELECT DISTINCT id, customerName, datePaid, amount
        TO_DAYS(DATE(datePaid)) - TO_DAYS(CURDATE()) AS DaysFromPayment
    FROM Accounting 
) ac ON c.last_name + ', ' + c.first_name = ac.customerName 
WHERE ac.DaysFromPayment = 30 

暫無
暫無

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

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