我的表格T1
包含C1, C2, C3, C4
列和T2
列C1
和D1
。我想在T1
中选择T2
中D1
的{{1}}大于C2
,C3
和C4
的所有行。
我试过这样的事情
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次是不必要的,因为它总是返回相同的结果。
有人可以帮忙吗? :)
答案 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)