嵌套选择的SQL查询(可能?)

时间:2016-02-05 01:00:52

标签: mysql sql sqlite

我的简化架构如下:

Table1(id, age, name)
Table2(id1, id2)

我需要比较Table2中ID的年龄,如果ID1早于ID2,则返回ID1的名称。

我能够获得ID1的年龄并将其与任意年龄进行比较,比如20:

SELECT name from (Table1 INNER JOIN Table2 
                 on Table1.id1 = Table2.id1 
                 where age > 20);

但是我应该如何让ID2的年龄取代那里的“20”呢?提前致谢

我的简化架构如下:

Table1(id, age, name)
Table2(id1, id2)

我需要比较Table2中ID的年龄,如果ID1早于ID2,则返回ID1的名称。

我能够获得ID1的年龄并将其与任意年龄进行比较,比如20:

SELECT name from (Table1 INNER JOIN Table2 
                 on Table1.id1 = Table2.id1 
                 where age > 20);

但是我应该如何让ID2的年龄取代那里的“20”呢?提前致谢

===== 编辑:我只需要在Id1比Id2更旧时打印出名称。话虽这么说,名字也必须是不同的。说:

Table1: (1, 10, "name1")
        (2, 20, "name2")
        (3, 30, "name3")

Table2: (2, 1)
        (2, 3)
        (3, 1)
        (3, 2)

结果将是“name2”“name3”,如第一次比较,2比3岁;第2次比较为2小于3我不需要打印;第3次比较,3比1大,打印3;第四个比较,虽然3比2更早,但它已经打印过,所以你不必再打印它。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那么您需要多次jointable1,然后您可以使用case语句比较他们的年龄:

select 
  case when t1a.age > t1b.age then t1a.name else t1b.name end older
from table2 t2
  join table1 t1a on t2.id1 = t1a.id
  join table1 t1b on t2.id2 = t1b.id

根据您的修改,只需使用where添加distinct条件:

select distinct t1a.name
from table2 t2
  join table1 t1a on t2.id1 = t1a.id
  join table1 t1b on t2.id2 = t1b.id
where t1a.age > t1b.age