我需要从包含产品A和产品B的交易列表中返回发票
表格示例
prod_code | invoice
apple | 100
banana | 100
orange | 100
apple | 101
kiwi | 101
grape | 101
apple | 102
banana | 102
grape | 102我需要输入2个产品,它必须列出发票号码,有两个产品。如果我输入苹果和香蕉,它必须返回100和102。如果我输入苹果和葡萄,它必须返回101和102。
这看起来应该很简单,但对于我的生活来说,我无法思考如何做到这一点。
已解决
好了,我解决了我自己的问题。不知道为什么我没有早点想到这一点。因为我认为这很简单。
select invoice from transaction where prod_code="apple" and invoice in (select invoice from transaction where prod_code="banana")发布于 2012-06-22 18:32:14
SELECT
invoice
FROM
transactions
WHERE
prod_code IN ('apple', 'banana')
GROUP BY
invoice
HAVING
COUNT(DISTINCT prod_code) = 2但是,请注意,这不是一个快速的查询,而且使用您现有的结构,不容易获得显著的性能提升。
根据其性质,第一步必须由find all invoices with 'apple' <OR> 'banana'执行,然后才能过滤出同时具有这两个属性的发票。
另一种选择是...
SELECT
t_apple.invoice
FROM
transactions AS t_apple
INNER JOIN
transactions AS t_banana
ON t_apple.invoice = t_banana.invoice
WHERE
t_apple.prod_code = 'apple'
AND t_banana.prod_code = 'banana'但要将其推广到n prod_codes就不那么简单了。
https://stackoverflow.com/questions/11154484
复制相似问题