根据另一个SQL查询的结果执行查询
问题描述:
我有两个表,其中包含customers和installments.i.e的名称。根据另一个SQL查询的结果执行查询
Customer Table:
id | name |contact |address
1 | xyz |33333333|abc
2 | xrz |33322333|abcd
Installments Table:
id | customer_id |amount_paid |amount_left | date
1 | 1 |2000 |3000 | 13/05/2017
2 | 1 |2000 |1000 | 13/06/2017
现在,我要来从分期付款表中的最新一排为每一位用户,我可以使用与下面的查询,
SELECT * FROM installments WHERE customer_id=1 ORDER BY `id` DESC LIMIT 1
现在,问题是,我想要做的它适用于所有客户ID。我试过子查询的事情,但不支持多行。我尝试将所有客户ID存储在PHP中的数组中,并使用“IN”,但因为客户数超过3000,所以它会花费太长时间并返回超出执行时间的错误。 任何形式的帮助或提示将非常感激。由于
答
SELECT
Customers.CustomerId,
Customers.Name,
Customers.Contact,
Customers.Address,
Installments.InstallmentId,
Installments.AmountPaid,
Installments.AmountLeft,
Installments.Date
FROM
Customers
INNER JOIN
(
SELECT
MAX(InstallmentId) AS MaxInstallmentId,
CustomerId
FROM
Installments
GROUP BY
CustomerId
) AS LatestInstallments ON Customers.CustomerId = LatestInstallments.CustomerId
INNER JOIN Installments ON LatestInstallments.MaxInstallmentId = Installments.InstallmentId
+0
工作就像一个魅力。谢谢! – Sam57
答
如果您想要添加列表的限制则仅限量其他休假限制部分,你可以做这样的事情
SELECT c.*,I.* FROM Customer_Table c LEFT JOIN Installments_Table I ON c.id=I.customer_id ORDER BY c.id DESC LIMIT 1
。直到我有你的问题,这将帮助你。否则你的问题可能是别的。
答
SELECT cust.*,inst_disp.* FROM Customer AS cust
LEFT JOIN (
SELECT MAX(id) AS in_id, customer_id
FROM installments
GROUP BY customer_id
) inst
ON inst.customer_id = cust.id
LEFT JOIN installments as inst_disp ON inst_disp.id = inst.in_id
听起来你想要一个'JOIN'。 – Dai