我需要将我的水平查询结果用于另一个SQL查询。怎么做,请帮忙。 假设我有两个表:
Tab1:
________________________________________
|ID | ARID | SEQ1 | SEQ2 | SEQ3 | SEQ4 |
|___|______|______|______|______|______|
|a1 | ar01 | A | C | B | D |
|a2 | ar02 | C | D | A | B |
|___|______|______|______|______|______|
Tab2:
_____________________
|ARID | SEQN | CODE |
|_____|______|______|
|ar01 | A | 1 |
|ar01 | G | 4 |
|ar01 | B | 2 |
|ar01 | D | 3 |
|ar01 | C | 8 |
|ar01 | F | 6 |
|ar01 | E | 5 |
|ar01 | H | 7 |
|ar02 | A | 1 |
|ar02 | H | 8 |
|_____|______|______|
我需要这样的结果:
ResultTab:
_____________________
|ARID | SEQN | CODE |
|_____|______|______|
|ar01 | A | 1 |
|ar01 | C | 8 |
|ar01 | B | 2 |
|ar01 | D | 3 |
|_____|______|______|
它会从SEQ1
获取某个SEQ2
的{{1}},SEQ3
,SEQ4
和ARID
,并返回Tab1
的映射值{1}} {1}}。{/}
请帮帮我。谢谢......
答案 0 :(得分:1)
尝试ARID='ar01'
SELECT A.* FROM Tab2 A, Tab1 B
WHERE A.ARID='ar01' AND A.ARID=B.ARID
AND (A.SEQN=B.SEQ1 OR A.SEQN=B.SEQ2 OR A.SEQN=B.SEQ3 OR A.SEQN=B.SEQ4)
答案 1 :(得分:1)
还有一个解决方案: -
Select b.* from Table2 b
inner join
(Select [ARID],[Seq1],1 as Ordr from Table1
union all
Select [ARID],[Seq2],2 as Ordr from Table1
union all
Select [ARID],[Seq3],3 as Ordr from Table1
union all
Select [ARID],[Seq4],4 as Ordr from Table1
)a(ARID,Seq,Ordr)
on a.ARID = b.ARID
and a.ARID = 'ar01' and a.SEQ=b.SEQN
order by a.ordr
答案 2 :(得分:1)
请使用UNION ALL
获取INDEX的好处。
SELECT t1.ARID, t1.SEQ1 AS SEQN
FROM Tab1 t1 INNER JOIN Tab2 t2 ON t1.ARID = t2.ARID
WHERE t1.ARID = 'ar01'
AND t1.SEQN = t2.SEQ1
UNION ALL
SELECT t1.ARID, t1.SEQ2 AS SEQN
FROM Tab1 t1 INNER JOIN Tab2 t2 ON t1.ARID = t2.ARID
WHERE t1.ARID = 'ar01'
AND t1.SEQN = t2.SEQ2
UNION ALL
SELECT t1.ARID, t1.SEQ3 AS SEQN
FROM Tab1 t1 INNER JOIN Tab2 t2 ON t1.ARID = t2.ARID
WHERE t1.ARID='ar01'
AND t1.SEQN = t2.SEQ3
UNION ALL
SELECT t1.ARID, t1.SEQ4 AS SEQN
FROM Tab1 t1 INNER JOIN Tab2 t2 ON t1.ARID = t2.ARID
WHERE t1.ARID='ar01'
AND OR t1.SEQN = t2.SEQ4