我在DB2(oracle语法)中有一个像这样的表,我们称它为SAMPLE
ID TAG_NAME VALUE
13 10 77
13 11 80
14 10 92
14 11 83
我想做的是选择TAG_NAME 10的值为77和TAG_NAME 11的值为80的所有行。我该怎么做?如果我在下面喜欢,它将尝试创建一种情况,其中TAG_NAME必须同时为10和11,而VALUE必须同时为77和80。我不想选择这些特定的标签名称,而是在选择标签时名称是x,那么它应该检查值是否是y等。
SELECT
*
FROM
SAMPLE
WHERE
(TAG_NAME=10 AND VALUE=77)
AND (TAG_NAME=11 AND VALUE=80)
我要达到的结果是这样:
ID TAG_NAME VALUE
13 10 77
13 11 80
答案 0 :(得分:1)
您可以使用group by
和having
:
SELECT s.id
FROM SAMPLE s
WHERE (TAG_NAME = 10 AND VALUE = 77) OR
(TAG_NAME = 11 AND VALUE = 80)
GROUP BY s.id
HAVING COUNT(DISTINCT TAG_NAME) = 2;
答案 1 :(得分:1)
我不了解DB2,但是在Oracle中,您可以这样做:
select *
from demo
where (tag_name, value) in ((10,77), (11,80));
答案 2 :(得分:0)
我认为您说的是自己的问题:
如果我在下面喜欢的话,它将尝试创建TAG_NAME 必须同时为10和11,而VALUE必须同时为77和80
如果将其更改为“或”,它应该可以工作。
SELECT
* .
FROM
SAMPLE
WHERE
(TAG_NAME=10 AND VALUE=77)
OR (TAG_NAME=11 AND VALUE=80)
OR (TAG_NAME=x AND VALUE=y)