选择所有一个值(具有条件)高于另一个表(具有不同条件)中的值的位置

时间:2018-08-17 06:29:30

标签: sql oracle

我想要的是表1或表3的ID号,其中特定颜色的值高于另一张表中特定颜色的值。

赞: 从表1中选择ID,其中表1中的颜色“蓝色”的值高于与表3中的ID匹配的颜色“紫色”的值。

表1

ID  |   Color   |   KeyA    |   KeyB
1   |   Blue    |   AB      |   12
2   |   Red     |   CD      |   34
3   |   Green   |   EF      |   56
1   |   Pink    |   EF      |   7

表2

KeyA    |   KeyB    |   Value       
AB      |   12      |   10      
AB      |   34      |   20      
EF      |   56      |   40  

表3

ID  |   Color   |   KeyC    |   KeyD
1   |   Purple  |   QW      |   15
2   |   Yellow  |   ER      |   45
3   |   Orange  |   TY      |   78

表4

KeyC    |   KeyD    |   Value       
QW      |   15      |   8       
TY      |   45      |   26      
TY      |   78      |   67      

表1和表3通过ID连接(不是唯一的) 表1和表2连接在它们的KeyA和KeyB上 表3和表4分别在它们的KeyC和KeyD上连接

这可能很简单,但是我一直在盯着它看很久了。


Eddit:原始问题已由scaisEdge回答,但我有一个后续问题。

是否还可以从表1中选择ID,其中颜色为“蓝色”的行的对应值比颜色为“粉红色”的行的对应值高?

1 个答案:

答案 0 :(得分:3)

您应该对所有表使用INNER JOIN,例如:

select t1.ID 
from table1 t1 
inner join  Table2 t2 ON t1.KeyA = t2.KeyA AND t1.KeyB = t2.KeyB 
inner join Table3 t3 ON t1.ID = t3.ID 
inner join Table2 t4 ON t3.KeyC = t4.KeyC AND t3.KeyD = t4.KeyD 
WHERE  t2.value > t4.value  

蓝色和粉红色的ID

select t1.ID 
from table1 t1 
inner join  Table2 t2 ON t1.KeyA = t2.KeyA AND t1.KeyB = t2.KeyB 
inner join Table3 t3 ON t1.ID = t3.ID 
inner join Table2 t4 ON t3.KeyC = t4.KeyC AND t3.KeyD = t4.KeyD 
INNER JOIN table1 t5 on t1.id = t5.id and t1.color='Blue' and t5.color='Pink'
WHERE  t2.value > t4.value