我们可以使用多个 where IN 子句触发 sql 查询吗?如果可以,它是如何工作的?

Can we fire a sql query with multiple where IN clause , if yes how does it work?

select * from student where id in(1,2,3,4) 格式的查询与

类似
select * from student where id=1;
select * from student where id=2;
select * from student where id=3;
select * from student where id=4;

这是我所知道的。

现在我想用多个 WHERE IN CLAUSE

触发查询
SELECT    Count(*) NO_OF_PO, QUANTITY FROM    INTER_DEFECT idp
WHERE    DEFECT_ID IN(1,2,3) 
AND    PO_NUMBER IN (4,5,6)  
AND    SUPP_ID IN (7,8,9)  
AND    LINE_NO IN (10,11,12)    
AND    RECEIPT_NO IN(13,14,15)

我希望它在现实中像这样发射

SELECT    Count(*) NO_OF_PO, QUANTITY FROM    INTER_DEFECT idp
WHERE    DEFECT_ID =1
AND    PO_NUMBER =4
AND    SUPP_ID = 7
AND    LINE_NO = 10
AND    RECEIPT_NO=13

 SELECT    Count(*) NO_OF_PO, QUANTITY FROM    INTER_DEFECT idp
    WHERE    DEFECT_ID =2
    AND    PO_NUMBER =5
    AND    SUPP_ID = 8
    AND    LINE_NO = 11
    AND    RECEIPT_NO=14

等等等等

所以你看到参数顺序不应该像

那样改变

DEFECT_ID =1 应该用 PO_NUMBER =4 触发,例如

DEFECT_ID =1 AND PO_NUMBER =4 ....

并且 DEFECT_ID =2 应该触发 PO_NUMBER =5 例如

DEFECT_ID =2 AND PO_NUMBER =5 ....

这在 Oracle 或任何其他数据库中可能吗?

select * from student where id in(1,2,3,4)

作为

工作
select * from student where id = 1 or id = 2 or id = 3 or id = 4

关于你的第二个问题,试试这个

SELECT    Count(*) NO_OF_PO, QUANTITY FROM    INTER_DEFECT idp
WHERE    
(DEFECT_ID =1
AND    PO_NUMBER =4
AND    SUPP_ID = 7
AND    LINE_NO = 10
AND    RECEIPT_NO=13
or
DEFECT_ID =2
AND    PO_NUMBER =5
AND    SUPP_ID = 8
AND    LINE_NO = 11
AND    RECEIPT_NO=14)

Oracle 支持具有多个表达式的 in 子句。也就是说,你可以这样做:

SELECT Count(*) NO_OF_PO, QUANTITY
FROM INTER_DEFECT idp
WHERE (DEFECT_ID, PO_NUMBER, SUPP_ID, LINE_NO, RECEIPT_NO) IN
       ( (1, 4, 7, 10, 13), (2, 5, 8, 11, 14), (3, 6, 9, 12, 15) );

并非所有数据库都支持此构造。通常,您只需使用 ANDOR:

WHERE (DEFECT_ID = 1 and PO_NUMBER = 4 . . . ) OR
      (DEFECT_ID = 2 and PO_NUMBER = 5 . . . ) OR
      (DEFECT_ID = 3 and PO_NUMBER = 6 . . . )

或者将 join 与具有正确值的 CTE 或子查询一起使用。

如果您有 DEFECT_ID、PO_NUMBER、SUPP_ID、LINE_NO、RECEIPT_NO 的数据。在 table 那么你可以这样做 执行此查询并复制总结果并将其粘贴到您的查询 window 中。 您将获得脚本

SELECT  
'SELECT    Count(*) NO_OF_PO, QUANTITY FROM    INTER_DEFECT idp
WHERE  DEFECT_ID =' +DEFECT_ID+
' AND PO_NUMBER = '+PO_NUMBER +
' AND SUPP_ID=' +SUPP_ID+
' AND LINE_NO='+LINE_NO +
' AND RECEIPT_NO='+ RECEIPT_NO

FROM INTER_DEFECT

这很奇怪,但它会给出你的答案


对于多个 WHERE ... IN 就像您展示的那样,您可以采用所有关于 IN (....) id 的组合。

如果你需要 DEFECT_ID =1 WHERE PO_NUMBER =4 ...你需要做类似

的事情
SELECT    Count(*) NO_OF_PO, QUANTITY FROM    INTER_DEFECT idp
WHERE    ( DEFECT_ID =1  AND    PO_NUMBER =4  AND    SUPP_ID = 7 AND LINE_NO = 10 AND    RECEIPT_NO=13)
OR (DEFECT_ID =2   AND    PO_NUMBER =5   AND    SUPP_ID = 8   AND    LINE_NO  = 11    AND    RECEIPT_NO=14) ...