我们可以使用多个 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) );
并非所有数据库都支持此构造。通常,您只需使用 AND
和 OR
:
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) ...
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) );
并非所有数据库都支持此构造。通常,您只需使用 AND
和 OR
:
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) ...