我的简化架构如下:
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更早,但它已经打印过,所以你不必再打印它。
答案 0 :(得分:0)
如果我理解正确,那么您需要多次join
到table1
,然后您可以使用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