查找字段大于MySQL中集合中所有值的记录

时间:2013-05-22 15:31:45

标签: mysql select

我的表格T1包含C1, C2, C3, C4列和T2C1D1。我想在T1中选择T2D1的{​​{1}}大于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次是不必要的,因为它总是返回相同的结果。

有人可以帮忙吗? :)

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

如果我理解正确,你的钥匙就是C1 ......你需要正确加入你的桌子..

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

答案 2 :(得分:0)

我整理了一点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)