Table1
- > Id,CountryFk,CompanyName Table2
- > Id,CountryFk,CompanyName,网站我需要将Table1
和Table2
合并到一个主表中。我知道这可以通过以下查询来完成 -
INSERT INTO masterTable(Id, CountryFk, CompanyName)
SELECT * FROM Table1
UNION
SELECT * FROM Table2;
但是,我在website
中有一个额外的列table2
,table1
中没有。{1}}。我在masterTable
中需要此列。
更重要的是,Table1
和Table2
重复公司具有相同的countryFK
。例如,IBM
的{{1}}可能会在countryFK=123
中出现两次。 Table1
Table1
中可能有companyName
Table2
。
例如IBM
countryFk = 123
和table1
table2
可能存在masterTable
。我需要确保masterTable
没有任何重复的公司。
请注意,公司名称本身不必是唯一的。 IBM
可以 countryFK = 123
IBM
和countryFk = 321
masterTable
。
IBM
无法 countryFk=123
function change() {
...
}
change();
两次。
答案 0 :(得分:2)
恕我直言,如果你需要确保在MasterTable中不重复CompanyName
和CountryFk
,你应该在列上添加一个唯一索引。
下面的查询选择Table1和Table2中的所有不同值,并插入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
答案 1 :(得分:1)
这可能有用
INSERT INTO masterTable(Id, CountryFk, CompanyName,Website)
SELECT Id, CountryFk, CompanyName, NULL as Website FROM Table1
UNION
SELECT Id, CountryFk, CompanyName,Website FROM Table2;
答案 2 :(得分:0)
尝试使用正确的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
答案 3 :(得分:0)
var indices = function(find, where) {
var arr = [];
for (var i = 0, l = where.length; l > i; i++)
if (find === where[i])
arr.push(i);
return arr;
};
alert(indices("l", "Hello World")); // [2, 3, 9]