繁体   English   中英

如何将我的水平查询结果用于另一个SQL查询

[英]How to use my horizontal query result to another SQL query

我需要将水平查询结果用于另一个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 |
|_____|______|______|

这将获取SEQ1SEQ2SEQ3SEQ4一定ARIDTab1和返回映射值Tab2ARID

请帮我。 谢谢...

试试这个为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)

另一种解决方案:-

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

SQL FIDDLE DEMO

请使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM