简体   繁体   English

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

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

I need to use my horizontal query result to another SQL query. 我需要将水平查询结果用于另一个SQL查询。 How to do it, Please help. 怎么做,请帮忙。 Suppose I have two Tables: 假设我有两个表:

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 |
|_____|______|______|

Well I need result something like this: 好吧,我需要这样的结果:

ResultTab:
_____________________
|ARID | SEQN | CODE |
|_____|______|______|
|ar01 |    A |    1 |
|ar01 |    C |    8 |
|ar01 |    B |    2 |
|ar01 |    D |    3 |
|_____|______|______|

It will fetch SEQ1 , SEQ2 , SEQ3 and SEQ4 for a certain ARID from Tab1 and return the mapped values from Tab2 for that ARID . 这将获取SEQ1SEQ2SEQ3SEQ4一定ARIDTab1和返回映射值Tab2ARID

Please help me. 请帮我。 Thank you... 谢谢...

try this for ARID='ar01' 试试这个为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)

One more solution :- 另一种解决方案:-

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 SQL FIDDLE DEMO

Please use UNION ALL to get benefit of INDEX. 请使用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