如果我有一个包含
列的表格ID1 ID2 VAL1 VAL2
ID1,ID2作为主键索引。
如何为特定的ID1,ID2值执行任何SQL语句?
示例:我的记录表有PK(1,1)(1,2)(2,4)(2,1)(3,1)(3,2)(3,5)
我想只选择带(1,1)(1,2)(3,5)(3,2)
的记录带
的SELECT查询SELECT * FROM tbl1 WHERE ID1 IN(1,3)AND ID2 IN(1,2,5)
将产生不希望的结果:(3,1)。那么最好的方法是什么?
我正在寻找SQL的总体答案,但如果它依赖于DBMS,我想知道如何在PostgreSQL和MySQL中这样做。
答案 0 :(得分:1)
MySQL和PostgreSQL都支持IN
中的元组,如下所示。
SELECT *
FROM tbl1
WHERE (ID1,ID2) IN ((1,1) (1,2) (2,4) (2,1) (3,1) (3,2) (3,5));
答案 1 :(得分:0)
您可以使用and
和or
:
SELECT *
FROM tbl1
WHERE ID1 = 1 AND ID2 = 1 OR
ID1 = 1 AND ID2 = 2 OR
ID1 = 3 AND ID2 = 5 OR
ID1 = 2 AND ID2 = 2
答案 2 :(得分:0)
这可能是您所要求的最紧凑的方式:
SELECT *
FROM tbl1
WHERE (ID1 = 1 AND (ID2 = 1 OR ID2 = 2))
OR (ID1 = 3 AND (ID2 = 5 OR ID2 = 2));
答案 3 :(得分:0)
SELECT * FROM tbl1 WHERE ID1 = 1 AND ID2 IN (1,2)
UNION
SELECT * FROM tbl1 WHERE ID1 = 3 AND ID2 IN (5,2)
OR
SELECT * FROM tbl1 WHERE (ID1 = 1 AND ID2 IN (1,2)) OR (ID1 = 3 AND ID2 IN (5,2))
答案 4 :(得分:0)
您也可以尝试
SELECT
*
FROM
tbl1
JOIN
(
SELECT 1 AS ID1, 1 AS ID2
UNION ALL
SELECT 1 AS ID1, 2 AS ID2
UNION ALL
SELECT 2 AS ID1, 4 AS ID2
UNION ALL
SELECT 2 AS ID1, 1 AS ID2
UNION ALL
SELECT 3 AS ID1, 1 AS ID2
UNION ALL
SELECT 3 AS ID1, 2 AS ID2
UNION ALL
SELECT 3 AS ID1, 5 AS ID2
) as keylist ON tbl1.ID1 = keylist.ID1 AND tbl1.ID2 = keylist.ID2