2014-01-27 2 views
0

я следующие две таблицы TABLEA и TableBВыберите строки, а не в другой таблице, сравнивая два стола

TableA

Id Month_Id Customer_Id Total_Amount 
1 1   1    50 
2 2   1    150 
3 3   1    200 
4 1   2    75 
5 2   2    100 
6 1   3    400 
7 2   3    200 

TableB

Id Month_Id Customer_Id   Total_Amount 
1  1    1    50 
2  2    1   150 
3  1    2    75 

I хочу пообщаться стричь Month_Idcustomer_idTOTAL_AMOUNT в обеих таблицах и выберите Id из TableA. Результат должен быть следующим.

Выход

Id 
3 
5 
6 
7 

Моя концепция:

SELECT TableA.Id FROM TableA 
WHERE TableA.Month_Id <> TableB.MonthId AND 
TableA.Customer_Id <> TableB.Customer_Id AND 
TableA.Total_Amount <> TableB.Total_Amount 
+3

Что ваш код до сих пор? –

+0

Сравните и верните что? Как совместить равные суммы в том же месяце для тех же пользователей и возвратных строк, у которых нет другой пары в другой таблице? –

ответ

1
SELECT TableA.Id 
    FROM TableA 
    WHERE NOT EXISTS (
     SELECT 1 
     FROM TableB 
     WHERE TableB.Month_Id = TableA.Month_Id 
     AND TableB.Customer_Id = TableA.Customer_Id 
     AND TableB.Total_Amount = TableA.Total_Amount 
    ) 
1
select Id 
from (
select Id, Month_Id, Customer_Id, Total_Amount from TableA  
except  
select Id, Month_Id, Customer_Id, Total_Amount from TableB 
) q 
0

Вы можете использовать Merge с WHEN NOT MATCHED

место ваше состояние в ON <merge_search_condition>

0

В Oracle SQL было бы:

SELECT ID FROM 
    (SELECT ID, Month_Id, Customer_Id, Total_Amount FROM TABLE_A 
    MINUS 
    SELECT ID, Month_Id, Customer_Id, Total_Amount FROM TABLE_B); 

Является ли это то, что вы хотите? (Не уверен оператора МИНУС в SQL-сервере, хотя)

+1

В SQL Server действительно нет оператора 'MINUS'. В эквиваленте есть «EXCEPT». – Mureinik

0
SELECT Id FROM TableA A LEFT JOIN tableB B 
    ON A.Id=B.Id AND A.Month_Id =B.Month_Id 
    AND A.Customer_Id =B.Customer_Id 
    AND A.Total_Amount=b.Total_Amount 
WHERE B.Id is NULL 
+1

Несколько слов, что было не так, и как ваш код решает, что сделает этот ответ лучше – rene

1
SELECT id FROM 
    (SELECT id, month_id, customer_id, total_ammount FROM TableA 
     EXCEPT  
     SELECT id, month_id, customer_id, total_ammount FROM TableB); 
1

Вы можете использовать EXCEPT набор оператора:

SELECT id 
FROM (SELECT * FROM table_a 
     EXCEPT 
     SELECT * FROM table_b) t 
Смежные вопросы