簡體   English   中英

將數據從兩個相似的表插入到SQL Server中的一個主表中

[英]Inserting data from two similar tables into one master table in Sql Server

  • Table1 > ID,CountryFk,CompanyName
  • Table2 > ID,CountryFk,CompanyName,網站

我需要將Table1Table2合並到1個主表中。 我知道這可以通過以下查詢來完成-

   INSERT INTO masterTable(Id, CountryFk, CompanyName)
   SELECT * FROM Table1
   UNION
   SELECT * FROM Table2; 

但是,我在table2有一個額外的列,即table1沒有的website 我需要masterTable此列。

更重要的是, Table1Table1 Table2重復公司具有相同的countryFK 例如, Table1兩次出現了countryFK=123 IBM Table1可以有一個companyName存在於Table2

例如: table1table2可能存在countryFk = 123 IBM 我需要確保masterTable沒有重復的公司。

請注意,公司名稱本身不必唯一。 masterTable 可以具有IBMcountryFK = 123IBMcountryFk = 321

masterTable 不能兩次使用countryFk=123 IBM

恕我直言,如果你需要保證雙方CompanyNameCountryFk在MasterTable不能重復,你應該在列中添加唯一索引。

下面的查詢選擇表1和表2中的所有不同值,並插入對CompanyNameCountryFk存在性檢查。

-- 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM