将主表和详细信息表连接为一个表

时间:2014-09-12 08:04:55

标签: sql sql-server

我有一个主表和详细信息表,如下所示

主表

Id    code   Name
-------------------
1     00     qqq

明细表

Id    code   Name
-------------------
1     01     xyz
1     02     pqr
1     03     abc
1     04     aaa

现在我需要如下结果

结果

Id    code  Name
-----------------
1     00    qqq
1     01    xyz
1     02    pqr
1     03    abc
1     04    aaa

我想避免使用UNION

提前致谢:)

3 个答案:

答案 0 :(得分:3)

好吧,我不知道你为什么不想使用Union。

但如果你不想使用联盟,你可以使用FULL OUTER JOIN。像这样的东西 -

SELECT COALESCE(Master1.id, Detail.id) AS id
    ,COALESCE(Master1.code, Detail.code) AS code
    ,COALESCE(Master1.NAME, Detail.NAME) AS NAME
FROM MASTER1
FULL OUTER JOIN DETAIL ON Master1.code = Detail.code

输出

Id    code  Name
-----------------
1     00    qqq
1     01    xyz
1     02    pqr
1     03    abc

检查SQL小提琴

Here

答案 1 :(得分:1)

如果表格不够大,您可以使用

创建临时表并从主数据和详细信息中插入数据

插入temp_table select * from detail;

从master中插入temp_table select *;

或者如果你想要你也可以使用下面提到的查询来组合表的数据

从详细信息中插入主精选*;

答案 2 :(得分:0)

有很多方法可以实现这一目标...您可以尝试创建临时表并将所有数据推入其中,然后选择不同类型的东西..

以下是使用CTE的另一种方法,让我们知道它是否适合您

CREATE TABLE #Master
( ID INT, Code VARCHAR(50), Name VARCHAR(50))

CREATE TABLE #Details 
( ID INT, Code VARCHAR(50), Name  varchar(50))

INSERT INTO #Master values(1,'00', 'qqq')

INSERT INTO #Details values(1,'01', 'xyz')
INSERT INTO #Details values(1,'02', 'pqr')
INSERT INTO #Details values(1,'03', 'abc')
INSERT INTO #Details values(1,'04', 'aaa')


; WITH CTE_RESULT AS
(
    SELECT ROW_NUMBER() OVER (PARTITION BY CODE, NAME ORDER BY CODE, NAME) ROW_NO, ID, CODE, NAME 
    FROM #Details D 
)
SELECT A.ID, A.CODE, A.NAME FROM CTE_RESULT A 
INNER JOIN #Master M ON M.ID=A.ID WHERE ROW_NO=1