考虑以下数据集:
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
如果这令人困惑,请表示歉意。
答案 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