Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于多个记录条件返回结果_Sql - Fatal编程技术网

Sql 基于多个记录条件返回结果

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

我需要从包含产品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 如果我输入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'