2011-10-28 2 views
3

Мне нужно сравнить 2 таблицы, чтобы найти дубликат, но поля позволяют дублировать.SQL: Сравнить 2 таблицы с дубликатами

For Example: 
Tbl1: 
455 
7991 
7991 

Tbl2: 
455 
7991 
7991 
7991 

Мне нужно написать запрос, который показывает, есть дополнительный 7991 в таблице 2. Я попробовал право присоединиться, но он по-прежнему считает, что матч так он не работает должным образом. Если бы кто-нибудь мог указать мне в правильном направлении, я бы очень признателен. Благодаря!!

+0

Что РСУБД это? –

+0

Это ваше единственное значение в таблице, другие значения 7991 различны? – GregM

+0

Это для Microsoft Access. Я попробовал коды ниже, но они не сработали. Я не уверен, что понимаю ваш вопрос greg? – user1018766

ответ

2
SELECT t1.colname 
FROM (SELECT colname 
        , COUNT(colname) AS colCount 
      FROM  tbl1 
      GROUP BY colname 
     ) t1 
     INNER JOIN (SELECT colname 
         , COUNT(colname) AS colCount 
       FROM  tbl2 
       GROUP BY colname 
      ) t2 ON t1.colname = t2.colname 
        AND t1.colCount <> t2.colCount 
+0

+1 Это выглядит как правильный подход для MS Access. Я отредактировал SQL, потому что я не думаю, что Access 'db engine принимает JOIN как синоним INNER JOIN. Измените его, если вы намеревались что-то другое. Если он не работает так, как написано, я бы переместил 't1.colCount <> t2.colCount' в предложение WHERE. – HansUp

+0

работал отлично, спасибо! – user1018766

1

Если база данных поддерживает FULL OUTER JOIN (не MySQL) это даст вам все различия между этими двумя таблицами:

SELECT 
    T1.x, 
    COALESCE(T1.cnt, 0) AS T1_count, 
    COALESCE(T2.cnt, 0) AS T2_count 
FROM 
(
    SELECT x, COUNT(*) AS cnt 
    FROM Tbl1 
    GROUP BY x 
) T1 
FULL OUTER JOIN 
(
    SELECT x, COUNT(*) AS cnt 
    FROM Tbl2 
    GROUP BY x 
) T2 
ON T1.x = T2.x 
WHERE T1.cnt <> T2.cnt 
+0

Спасибо за быстрый ответ! я сейчас все пойду. – user1018766

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