【问题标题】:Find records where field is greater than all values in a set in MySQL在MySQL中查找字段大于集合中所有值的记录
【发布时间】:2013-05-23 00:02:06
【问题描述】:

我有一个表 T1 与列 C1, C2, C3, C4T2 与列 C1D1。我想选择T1 中的所有行,其中T2 中的适当行的D1 大于C2C3C4

我试过这样的

SELECT C1,C2,C3,C4 FROM T1
WHERE (SELECT D1 FROM T2 WHERE C1=T1.C1)>(C2,C3,C4)

还有这个

SELECT C1,C2,C3,C4 FROM T1
WHERE (SELECT D1 FROM T2 WHERE C1=T1.C1)>MAX(C2,C3,C4)

但我得到的是语法错误。我可以这样写 WHERE 子句:

WHERE (SELECT D1 FROM T2 WHERE C1=T1.C1)> C2
 AND  (SELECT D1 FROM T2 WHERE C1=T1.C1)> C3
 AND  (SELECT D1 FROM T2 WHERE C1=T1.C1)> C4

但是,没有必要运行相同的子查询 3 次,因为它总是返回相同的结果。

有人可以帮忙吗? :)

【问题讨论】:

    标签: mysql select


    【解决方案1】:

    您需要GREATEST() 函数,它允许多个参数。 MAX() 只接受一个参数,用于聚合操作

    SELECT *
    FROM T1
    ...
    WHERE T2.D1 > GREATEST(C1,C2,C3,C4)
    

    如果有帮助,MAX() 在结果集中的单个字段上“垂直”工作。 GREATEST()“水平”工作,并在单个记录中运行。

    【讨论】:

    • 谢谢你,马克! GREATEST 正是我所需要的,“水平”和“垂直”工作的解释非常好。 :)
    【解决方案2】:

    另外,如果我理解正确,您的密钥是 C1...您需要正确加入您的表格..

    SELECT T1.*
    FROM T1
    LEFT JOIN T2 USING (C1)
    WHERE D1 > GREATEST(C2,C3,C4)
    

    【讨论】:

      【解决方案3】:

      我整理了一些 SQL Fiddle for you here 并尝试复制我对您所要求的内容的理解。

      这是我使用的查询:

      SELECT one.* FROM one, two
      WHERE (two.frags > one.size)
        AND (two.frags > one.weight)
        AND (two.frags > one.height)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-02
        • 2017-03-06
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-29
        相关资源
        最近更新 更多