我试图合并两个表,同时保留有关条目来自哪个表的信息。
例如,输入
Table A
Column1 Column2
0 X
1 Y
Table B
Column1 Column2
3 Z
1 Y
我要结束这个:
Table C
Column1 Column2 Column3
0 X A
1 Y A
3 Z B
我尝试了INSERT INTO语句,但是如果不从(例如)获取所有重复项,就无法在Column3中插入不同的文本。表2
答案 0 :(得分:2)
您想要full outer join
:
SELECT COALESCE(a.col1, b.col1), COALESCE(a.col2, b.col2),
(CASE WHEN a.col1 IS NOT NULL
THEN 'A'
ELSE 'B'
END)
FROM tableA a FULL OUTER JOIN
tableB b
ON b.col1 = a.col1;
答案 1 :(得分:2)
您可以使用窗口功能row_number()
with cte as
(
select column1,column2,'A' as column3 from tableA
union all
select column1,column2,'B' as column3 from tableB
) , cte2 as
(
select * , row_number() over(partition by column1,column2 order by column3 ) rn
from cte
) select column1,column2,column3 from cte2 where rn=1
答案 2 :(得分:1)
类似的事情可能是您寻求的解决方案。
SELECT Column1, Column2, 'A' AS Column3
FROM [Table A]
UNION
SELECT Column1, Column2, 'B' AS Column3
FROM (
SELECT Column1, Column2
FROM [Table B]
EXCEPT
SELECT Column1, Column2
FROM [Table A]
) b
对我来说很奇怪,它不起作用。您的要求可以翻译为:
这就是此查询正在执行的操作。
答案 3 :(得分:1)
您可以尝试将UNION
和tableA
结合使用,然后将tableB
与outer join
结合使用。
CASE WHEN
WITH CTE AS (
SELECT Column1,Column2
FROM TableA
UNION
SELECT Column1,Column2
FROM TableB
)
SELECT t1.*,(case when t2.COLUMN1 is NOT null THEN 'A' ELSE 'B' END) Column3
FROM CTE t1
LEFT JOIN TableA t2 on t1.COLUMN1 = t2.COLUMN1 and t1.COLUMN2 = t2.COLUMN2
答案 4 :(得分:1)
您似乎想要来自private void Playing(object sender, EventArgs e)
{
int i= (int)((Button)sender).Tag;
PlaySong(listBox1.Items[i].ToString());
}
的行,然后想要来自n.Click += (s, ev) =>
{
//code when button clicked
};
的 other 行。这不完全是一个联合。
我会这样处理:
a