我有一个主表和详细信息表,如下所示
主表
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
提前致谢:)
答案 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小提琴
答案 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