您应该customerName
从 Accounting 表中删除 ,并将其替换为CustomerId
。但是,就目前而言,您可以JOIN
使用任何谓词作为JOIN
条件的两个表,如下所示:
SELECT c.pNumber
FROM Customers c
INNER JOIN accounting ac ON c.fName + ', ' + p.lName = ac.customerName
您的表Accouting
结构的问题在于,它没有被 规范化,尤其是不符合第三范式3NF,即:
3NF:消除不依赖于键的列
表中的列不依赖于该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