我正在尝试编写一个查询,其中给定一个具有列名称的用户表(对于ex)“喜欢”,我想选择所有那些具有0和1的记录的用户“喜欢”柱。架构看起来像这样:
id Name Likes
0 Tom 1
1 Alice 0
2 Tom 0
查询应该返回id = 0和id = 2的行,因为Tom为Like列提供了1和0。完成这种行为的最简单/最有效的查询是什么?
答案 0 :(得分:2)
如果Likes
在您的表格中只有1或0而没有其他内容,则可以执行此操作。
select distinct t1.Name From tableName t1
join tableName t2 on t1.name = t2.name and t1.Likes = 1 - t2.Likes
如果情况并非如此,请执行以下操作:
select distinct t1.Name From tableName t1
join tableName t2 on t1.name = t2.name and t1.Likes = 1 and t2.Likes = 0
另一个可能的解决方案就是这个。
select a.* from
tableName a
JOIN
(
select b.Name, count(distinct b.likes) as Likes
from tableName b
group by b.Name
having count(distinct b.likes) > 1
) a1 on a.Name = a1.Name
答案 1 :(得分:0)
假设您的表名为tab
,您可以使用:
SELECT *
FROM tab a
WHERE (SELECT count(distinct b.likes)
FROM tab b
WHERE a.name = b.name
AND b.likes in(0, 1)
) = 2
这可以很容易地扩展到所需的任何数量的不同喜欢。只需在IN
子句中枚举它们,并将子选择与值的数量进行比较。