Sql 基于多个记录条件返回结果
我需要从包含产品a和产品B的交易列表中返回发票 表格示例Sql 基于多个记录条件返回结果,sql,Sql,我需要从包含产品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和1
prod_code | invoice
apple | 100
banana | 100
orange | 100
apple | 101
kiwi | 101
grape | 101
apple | 102
banana | 102
grape | 102
我需要输入2种产品,它必须列出两种产品的发票号码。
如果我输入苹果和香蕉,它必须返回100和102
如果我输入apple和grape,它将返回101和102
看起来应该很简单,但就我的一生而言,我无法思考如何做到这一点
解决
好的,我解决了我自己的问题。不知道为什么我没早点想到。我觉得这很简单
select invoice from transaction where prod_code="apple" and invoice in (select invoice from transaction where prod_code="banana")
但是,请注意,这不是一个快速查询,而且使用现有的结构,要获得显著的性能提升并不容易
就其性质而言,第一步必须通过查找带有“apple”“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_代码就不那么简单了。@LispWarez-这两种查询都是非常常见的构造。你能详细说明一下不起作用的原因吗
?我相信我们可以为你做这件事,我一直都在用这两件事。。。
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'