数据库困境

时间:2010-08-26 17:38:00

标签: sql-server sql-server-2008

我有一个由以下表组成的数据库:

SourcesA:  source, country, language

SourcesB:  id, url, source

我首先需要创建一个新表(Table1)并插入源匹配的两个表的连接。

第二个表(表2)需要包含不匹配的记录。

第三个操作(表3)是获取第一个表并找到与第二个表具有匹配URL的所有记录。

赞赏任何想法

2 个答案:

答案 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