如果满足两个单独行上的条件,请选择数据

时间:2011-12-06 21:15:04

标签: sql

考虑以下数据集:

id   dataid   data
1     3095     5
1     3096     9
1     3097     8
2     3095     4
2     3096     9 
2     3097     15

现在,在这里,列someid标识某些数据,所以如果我看到3095,我知道数据列代表什么数据(名称,地址等)。我需要做一个检查,以便对于id组(即1和2)dataid = 3095然后data = 5 AND dataid = 3096然后data = 9,如果这是真的,将选择id组并且操作​​将完成它。

编辑:现在我使用以下SQL查询来执行上述操作:

SELECT *
FROM table s0
JOIN table s1 USING (dataid)
JOIN table s2 USING (dataid)
WHERE s1.dataid=359 AND s1.data=5
AND s2.dataid=360 AND s2.data=6;

但是如何从行到列获取输出。我需要的属性值仍然是关键:行中的值对,我希望它们作为列。

所以上面的输出是:

id     3095     3096      3097
1       5        9         8

而目前正从上述查询返回:

id     dataid  data   dataid_1   data_1   dataid_2   data_2
1       3095    5       Unnecessary stuff because of JOIN      
1       3096    9
1       3097    8

如果这令人困惑,请表示歉意。

1 个答案:

答案 0 :(得分:0)

SELECT id
FROM (SELECT DISTINCT id 
      FROM table) as ids
WHERE EXISTS (SELECT '1' 
              FROM table t2 
              WHERE t2.id = ids.id AND dataid = 3095 AND data = 5) 
AND EXISTS (SELECT '1' 
            FROM table t2 
            WHERE t2.id = ids.id AND dataid = 3096 AND data = 9)

此外,如果您要查询除给定表之外的其他表(一个id作为唯一键,最好是),请考虑包含该表,以消除使用DISTINCT