查询根据列条件返回行

时间:2014-01-23 21:59:42

标签: mysql sql

我正在尝试编写一个查询,其中给定一个具有列名称的用户表(对于ex)“喜欢”,我想选择所有那些具有0和1的记录的用户“喜欢”柱。架构看起来像这样:

id  Name  Likes
0   Tom   1
1   Alice 0
2   Tom   0

查询应该返回id = 0和id = 2的行,因为Tom为Like列提供了1和0。完成这种行为的最简单/最有效的查询是什么?

2 个答案:

答案 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子句中枚举它们,并将子选择与值的数量进行比较。