【问题标题】:SQL WHERE Help: how do i pull data from multiple rows in one single query?SQL WHERE 帮助:如何在一个查询中从多行中提取数据?
【发布时间】:2013-11-22 21:12:22
【问题描述】:

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

例如,我想提取用户具有 Color=blue 和 Color=red 的所有行。我有兴趣拉出这些多行以确定哪些用户将他们的颜色从蓝色更改为红色,或从红色更改为蓝色。

我现在的一般查询是这样的。出了什么问题,我该如何改进?谢谢!

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

【问题讨论】:

  • a.color = 'blue' AND a.color = 'red' 将始终返回 0 行。 a.color 不能同时是 redblue
  • 是的,没错,一行不能同时拥有。尝试使用 OR 而不是 AND,也许吧。
  • 要获得任何帮助,您必须解释表结构(方案)。
  • 向我们展示您的架构。同时更正您的标签,这是 SQL-Sever 还是 MySQL?
  • 有没有其他的表来存储颜色变化?

标签: mysql sql sql-server hql hive


【解决方案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)

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 非常过早的答案,很有可能所讨论的表确实是历史表(或者至少,它与不是历史表一样可能)。如果您要求用户发布更多代码,则应该作为评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 2017-04-14
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多