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

时间:2014-02-06 07:11:10

标签: mysql sql sql-server

我需要将我的水平查询结果用于另一个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}},SEQ3SEQ4ARID,并返回Tab1的映射值{1}} {1}}。{/}

请帮帮我。谢谢......

3 个答案:

答案 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

SQL FIDDLE DEMO

答案 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