SQL WHERE帮助:如何从一个查询中的多行中提取数据?

时间:2013-11-22 21:12:22

标签: mysql sql sql-server hql hive

我不确定这是否应该使用子查询或多个临时表...但任何帮助都会很棒!我试图在一个查询中执行以下操作。

我想拉出用户有Color = blue和Color = red的所有行。我有兴趣拉出这些多行来确定哪些用户将其颜色从蓝色变为红色,或从红色变为蓝色。

我现在的一般查询就是这个。有什么不对,怎么才能改进呢?谢谢!

  1. 这是否会返回Zero结果,因为我要求行的值同时为蓝色和红色? (这是不可能的)
  2. 我的另一个担心是,如果我使用OR代替AND,那么我将为用户提供蓝色或红色的行,但两种颜色之间没有变化。
  3. SELECT *
    FROM Table a
    WHERE a.color='blue'
    AND a.color='red'
    

2 个答案:

答案 0 :(得分:1)

我假设userId是定义用户的id,你可以用表中的任何内容替换。该问题称为Relational Division。希望这可以帮助!

    select * from table where color in ('blue','red') and userId in(select a.userId 
    from Table a
    where a.color in ('blue','red')
    group by a.userid  //whatever defines user uniquely
    having count(distinct a.color)=2)

答案 1 :(得分:-1)

MySQL不会像您希望的那样存储历史记录。您需要做的是每次用户更改颜色时都有另一个颜色历史记录表和日志条目。我会发布带有表结构的代码,但是有很多不同的方法可以做到这一点......所以没有表结构的问题没有得到表结构提议的答案。