我有一个由以下表组成的数据库:
SourcesA: source, country, language
SourcesB: id, url, source
我首先需要创建一个新表(Table1)并插入源匹配的两个表的连接。
第二个表(表2)需要包含不匹配的记录。
第三个操作(表3)是获取第一个表并找到与第二个表具有匹配URL的所有记录。
赞赏任何想法
答案 0 :(得分:1)
我会看一下使用视图。它们是结果集和实际表之间的交叉。由于这三个“表”中的所有数据都依赖于表中的实际数据,因此它是使用视图的理想位置。
http://www.codeproject.com/KB/database/View.aspx http://odetocode.com/Articles/299.aspx http://www.informit.com/articles/article.aspx?p=130855
答案 1 :(得分:1)
您可能不希望创建新表,数据已存在于数据库中。您只需要一些新方法来查看该数据。尝试这些,如果您需要它们作为永久解决方案,也可以将它们制作成视图。如果有真正的理由在数据库中复制数据,您也可以使用这些数据插入新创建的表中。
--result set/table 1
SELECT
B.id,
B.source,
B.url,
A.country,
A.language
FROM SourcesA A
JOIN SourcesB B
ON A.source = B.source
--result set/table 2
SELECT
'SourcesA',
B.id,
B.source,
B.url,
A.country,
A.language
FROM SourcesA A
LEFT JOIN SourcesB B
ON A.source = B.source
WHERE B.source IS NULL
UNION ALL
SELECT
'SourcesA',
B.id,
B.source,
B.url,
A.country,
A.language
FROM SourcesB B
LEFT JOIN SourcesA A
ON B.source = A.source
WHERE A.source IS NULL
--result set/table 3
SELECT
* --being lazy here
FROM
(
SELECT
B.id,
B.source,
B.url,
A.country,
A.language
FROM SourcesA A
JOIN SourcesB B
ON A.source = B.source
) T1
JOIN
(
SELECT
'SourcesA',
B.id,
B.source,
B.url,
A.country,
A.language
FROM SourcesA A
LEFT JOIN SourcesB B
ON A.source = B.source
WHERE B.source IS NULL
UNION ALL
SELECT
'SourcesA',
B.id,
B.source,
B.url,
A.country,
A.language
FROM SourcesB B
LEFT JOIN SourcesA A
ON B.source = A.source
WHERE A.source IS NULL
) T2
ON T1.url = T2.url