2017-02-15 4 views
0

Я много времени пытался решить, но не смог дотянуться до решения.
Ниже приведены мои таблицы. То, что я пытаюсь сделать, это удалить из t1, когда PO, SKU, LOC и REC совпадают между t1 и t2, а t2.ST - D, но те же PO, SKU, LOC должны существовать в t1, для которых ASN не является нулевым.SQL: выбор из таблицы на основе другой таблицы Столбцы

t1

PO | SKU| LOC | ASN |REC | allID 
a b c  e NULL NULL 
a b c  g  g  12 

t2

PO |SKU |LOC |ASN |REC |ST 
a b c NULL g D 

Сверху я должен иметь возможность удалить 2-й строки из t1, как на первой строке PO же, ы, ЛОК существует ANS АСН не равно нулю.

Thank you.

+0

Да, но REC не соответствует ... что именно вы хотите ??? – Kostis

+0

Можете ли вы показать нам свой код SQL? – jambonick

+0

Я бы показал код, но приведенный выше пример - довольно простая версия моего собственного кода. Реальный код более сложный. Спасибо за ваше время. @jambonick. – Amir

ответ

1

Буквальное толкование Вашего вопроса превращается в два exists положений:

delete t1 
    where exists (select 1 
        from t2 
        where t2.PO = t1.PO and t2.SKU = t1.SKU and 
         t2.LOC = t1.LOC and t2.REC = t1.REC and 
         t2.ST = 'D' 
       ) and 
      exists (select 1 
        from t1 tt1 
        where tt1.PO = t1.PO and tt1.SKU = t1.SKU and 
         tt1.LOC = t1.LOC and tt1.asn is not null 
       ); 

Я не 100% уверен, что это то, что вы действительно хотите - это будет delete все строк, которые соответствуют. Если это не то, что вы хотите, тогда вы должны задать вопрос еще один вопрос. У этого вопроса уже есть ответы, и грубо изменить вопрос таким образом, чтобы недействительные ответы.

+0

спасибо. Это сработало для меня. – Amir

0

Походит:

delete from t1 
where (t1.po,t1.sku,t1.loc,t1.rec) in 
    (select t2.po,t2.sku,t2.loc,t2.rec 
    from t2 
    where t2.st = 'D') 
and exists (select * from t1 t1_2 
      where t1_2.po = t1.po 
      and t1_2.sku = t1.sku 
      and t1_2.loc = t1.loc 
      and t1_2.asn is not null); 
Смежные вопросы