2010-08-26 3 views
1

У меня есть база данных, состоящая из следующих таблиц:базы данных дилемма

SourcesA: source, country, language 

SourcesB: id, url, source 

я в первую очередь необходимо создать новую таблицу (Table1) и вставить объединение двух таблиц, где источник матчей.

Вторая таблица (таблица 2) должна содержать записи, которые не совпадают.

Третья операция (таблица 3) заключается в том, чтобы взять первую таблицу и найти все записи, имеющие соответствующие URL-адреса со второй таблицей.

Любые идеи оценены

+1

Вы можете комбинировать выбор, используя соединение со вставкой, чтобы получить таблицу1/table2. А затем обработайте таблицу1, чтобы создать таблицу3. – Chris

+0

Вам действительно нужно создавать эти таблицы или вас интересует только конечный результат? –

+0

Мне нужно создать таблицы, чтобы записи могли быть просмотрены позже. – vbNewbie

ответ

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 
1

Я хотел бы взглянуть на использование представлений. Они являются перекрестком между наборами результатов и фактическими таблицами. Поскольку все ваши данные в этих трех «таблицах» зависят от фактических данных в таблицах, это идеальное место для использования представлений.

http://www.codeproject.com/KB/database/View.aspx http://odetocode.com/Articles/299.aspx http://www.informit.com/articles/article.aspx?p=130855

Смежные вопросы