我有这张桌子:
id user value
1 A Cool
2 A Cool
3 A Cool
2 A Warm
3 A Warm
4 B Cool
5 C Cool
5 C Warm
我想在这里得到的记录是“ Cool”的值,并且没有“ Warm”的值。可以通过ID和“用户”列进行标识。
我试图做这样的事情:
SELECT DISTINCT id, user FROM log_table where value= 'Cool'
但这仍将返回也具有“温暖”的记录
预期输出为:
id user value
1 A Cool
4 B Cool
我在Distinct上发现的另一个问题是,它不允许我添加*
,或者由于尝试错误,所以我不怎么做。我也可以在不同之后添加concat吗?没有在独特功能中对其进行处理?
我在这里可能错误地使用了Distinct。
答案 0 :(得分:1)
您可以将条件汇总用于预期结果
select id, user
from log_table
group by id, user
having count(case when value= 'Cool' then 1 else null end) > 0
and count(case when value= 'Warm' then 1 else null end) = 0
或者您可以使用exists
select id, user
from log_table a
where a.value = 'Cool'
and not exists (
select 1
from log_table
where a.id = id and a.user = user
and value= 'Warm'
)
答案 1 :(得分:1)
请考虑以下内容:
SELECT *
FROM my_table x
LEFT
JOIN my_table y
ON y.id = x.id
AND y.user = x.user
AND y.value = 'warm'
WHERE x.value = 'cool';
+----+------+-------+------+------+-------+
| id | user | value | id | user | value |
+----+------+-------+------+------+-------+
| 1 | A | Cool | NULL | NULL | NULL |
| 2 | A | Cool | 2 | A | Warm |
| 3 | A | Cool | 3 | A | Warm |
| 4 | B | Cool | NULL | NULL | NULL |
| 5 | C | Cool | 5 | C | Warm |
+----+------+-------+------+------+-------+
我将剩下的问题留给读者练习。