sql—将三个表连接起来,但其中一个表和两个表具有相同的列

qpgpyjmq  于 2021-07-24  发布在  Java
关注(0)|答案(4)|浏览(363)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

9个月前关门了。
改进这个问题
我需要连接三个表:

A
| ID | Text | Desc |
| 1  | 1234 | one  |
| 2  | 0000 | two  |
B
| ID | TextID |
| 1  | 1234   |
C
| ID | TextID |
| 1  |  0000  |

我需要在select值文本中输入两次,但每次值都来自不同的连接。我需要将表a连接到表b,并将表a连接到表c。
所以我需要的选择如下所示:
但我不知道如何解决它或加入它。输出应如下所示:

| desc1 | desc2 | 
|  one  | two   |
qrjkbowd

qrjkbowd1#

有了这些数据。。。。

WITH
a ( id , txt , dsc ) AS (
          SELECT  1  , 1234 , 'one'
UNION ALL SELECT  2  , 0000 , 'two'
)
,
b (id , textid ) AS (
          SELECT 1  , 1234 
)
,
c(id , textid ) AS (
          SELECT 1  ,  0000  
)

你真的不需要另外两张table。。。

SELECT
  MAX(CASE id WHEN 1 THEN dsc END) AS desc1
, MAX(CASE id WHEN 2 THEN dsc END) AS desc2
FROM a                                      
;

结果:

-- out  desc1 | desc2 
-- out -------+-------
-- out  one   | two
jtoj6r0c

jtoj6r0c2#

通过几个连接,您可以这样做:

SELECT ISNULL(TableC.id,TableB.id),A1.descr,A2.descr
FROM TableB
FULL JOIN TableC
ON TableB.ID = TableC.ID
LEFT JOIN TableA A1
ON A1.Text = TableB.TextID
LEFT JOIN TableA A2
ON A2.Text = TableC.TextID
sd2nnvve

sd2nnvve3#

您可以尝试使用after join pivot,但需要在([one]、[two]…)中的运算符后指示每个值:

select [one] as one_column ,[two] as two_column from
(
 select A.Desc from A
 left join B
 on A.ID=B.TextID and A.Text=B.TextID
 left join C
 on A.ID=C.ID and A.Text=C.TextID
)X
PIVOT ( max(X.Desc) For X.Desc in ([one],[two]) ) as piv_tab
6jygbczu

6jygbczu4#

也许是这样的?

select a1.desc as desc1, a2.desc as desc2 from b, c, a a1, a a2 where b.textid=a1.text and c.textid=a2.text

目前尚不清楚的是b和c之间的可能关系。如果没有任何的,我们就得到了两个表的完全笛卡尔积

相关问题