[英]Selecting data from two tables, inserting it into new table? (SQL / PHP)
[英]Inserting data from two similar tables into one master table in Sql Server
Table1
> ID,CountryFk,CompanyName Table2
> ID,CountryFk,CompanyName,网站 我需要将Table1
和Table2
合并到1个主表中。 我知道这可以通过以下查询来完成-
INSERT INTO masterTable(Id, CountryFk, CompanyName)
SELECT * FROM Table1
UNION
SELECT * FROM Table2;
但是,我在table2
有一个额外的列,即table1
没有的website
。 我需要masterTable
此列。
更重要的是, Table1
和Table1
Table2
重复公司具有相同的countryFK
。 例如, Table1
两次出现了countryFK=123
IBM
。 和Table1
可以有一个companyName
存在于Table2
。
例如: table1
和table2
可能存在countryFk = 123
IBM
。 我需要确保masterTable
没有重复的公司。
请注意,公司名称本身不必唯一。 masterTable
可以具有IBM
与countryFK = 123
和IBM
与countryFk = 321
。
masterTable
不能两次使用countryFk=123
IBM
。
恕我直言,如果你需要保证双方CompanyName
和CountryFk
在MasterTable不能重复,你应该在列中添加唯一索引。
下面的查询选择表1和表2中的所有不同值,并插入对CompanyName
和CountryFk
存在性检查。
-- Id is identity, no need to insert value
INSERT MasterTable (CountryFk, CompanyName, WebSite)
SELECT
CountryFk,
CompanyName,
(
SELECT TOP(1) WebSite FROM Table2
WHERE CompanyName = data.CompanyName
AND CountryFk = data.CountryFk
AND WebSite IS NOT NULL
) AS WebSite
FROM
(
SELECT CountryFk, CompanyName FROM Table1
UNION
SELECT CountryFk, CompanyName FROM Table2
) data
WHERE
NOT EXISTS
(
SELECT * FROM MasterTable
WHERE CompanyName = data.CompanyName AND CountryFk = data.CountryFk
)
GROUP BY
CountryFk,
CompanyName
这可能有效
INSERT INTO masterTable(Id, CountryFk, CompanyName,Website)
SELECT Id, CountryFk, CompanyName, NULL as Website FROM Table1
UNION
SELECT Id, CountryFk, CompanyName,Website FROM Table2;
尝试此操作以获得适当的UNION
。
INSERT INTO masterTable(Id, CountryFk, CompanyName,Website)
SELECT Id, CountryFk, CompanyName, "Website" as Website FROM Table1
UNION
SELECT Id, CountryFk, CompanyName, Website FROM Table2 WHERE CompanyName NOT IN(SELECT CompanyName FROM Table1);
要么
一次,将两个表数据合并到主表中,然后可以查找重复数据并将其删除
;WITH cte
AS (SELECT ROW_NUMBER() OVER (PARTITION BY CountryFk, CompanyName
ORDER BY ( SELECT 0)) RN
FROM MyTable)
DELETE FROM cte
WHERE RN > 1
INSERT INTO masterTable(CountryFk, CompanyName, WebSite)
SELECT CountryFk, CompanyName, min(WebSite)
FROM Table2
group by CountryFk, CompanyName;
INSERT INTO masterTable(CountryFk, CompanyName)
SELECT distinct CountryFk, CompanyName
FROM Table1
LEFT JOIN masterTable
on masterTable.CountryFk = Table1.CountryFk
and masterTable.CompanyName = Table1.CompanyName
where masterTable.CountryFk is null;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.