您应该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表的记帐。因此,您的表格应如下所示:Accountingid
客户表:
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