【发布时间】:2022-01-19 17:54:45
【问题描述】:
给定一个 ProductID 编号列表,我需要找到包含所有列出的 ProductID 编号的发票的详细信息。列表中的项目数是动态的。表格看起来像这样。
产品
产品ID 产品名称
发票
发票 ID 订购日期 客户编号
发票_产品
数量 产品编号 发票编号
现在我正在使用 MySQL SQL 语句,但我认为性能可能会成为一个问题。我不确定是否有更好的方法来写这个:
Select InvoiceId, DateOrdered, CustomerID
from Invoices
where InvoiceID in (
select InvoiceID from Invoice_Products where ProductID = 5
)
AND
InvoiceID in (
select InvoiceID from Invoice_Products where ProductID = 100
)
AND
InvoiceID in (
select InvoiceID from Invoice_Products where ProductID = 1005
)
我的产品列表将由多选产品框提供。只应显示所有项目匹配的发票,否则我只会使用 in 语句进行内部连接。
【问题讨论】:
-
使用 WHERE EXISTS 而不是 WHERE IN。
标签: mysql sql query-optimization