0

我有一个T1带有列C1, C2, C3, C4T2列的表C1D1. 我想选择所有行中的适当T1行大于,和.T2D1C2C3C4

我尝试过这样的事情

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 次,因为它总是返回相同的结果。

有人可以帮忙吗?:)

4

3 回答 3

2

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

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

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

于 2013-05-22T15:39:42.230 回答
1

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

SELECT T1.*
FROM T1
LEFT JOIN T2 USING (C1)
WHERE D1 > GREATEST(C2,C3,C4)
于 2013-05-22T15:43:53.927 回答
0

我在这里为您整理了一个小SQL Fiddle,并尝试复制我对您所要求的内容的理解。

这是我使用的查询:

SELECT one.* FROM one, two
WHERE (two.frags > one.size)
  AND (two.frags > one.weight)
  AND (two.frags > one.height)
于 2013-05-22T16:02:06.573 回答