![](/img/trans.png)
[英]How do I match value from one MySql table to column name of another table in PHP?
[英]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
。 因此,您的表應如下所示:
客戶表:
id
, fName
, lName
, pNumber
。 會計表:
id
, customerId
外鍵引用Customers(Id)
, datePaid
, amount
。 然后,您可以將兩個表直接JOIN
到ON 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.