2015-11-11 3 views
0

Я использую следующий запрос для извлечения записей из таблицы External_Blk_Itm_Contracts.Как получить отфильтрованные записи, которые не находятся в другой таблице

Итак, вот в таблице BudContractSummary у меня есть TankId и ContractId.

Так вот я хочу получить все записи из таблицы и состояния External_Blk_Itm_Contracts такое же TankId и contractId не должно быть в BudContractSummary таблице

Но могут быть разные комбинации. Но не такое же сочетание

, как я могу это сделать

SELECT BTANK.TANKID, BCON.CONTRACTID FROM External_Blk_Itm_Contracts EBIC 
INNER JOIN BUDTERMINALS BT ON BT.MBFTERMINALNAME = EBIC.TerminalName 
INNER JOIN BudCustomers BC ON BC.LegalName = EBIC.CustomerName 
INNER JOIN BUDCONTRACTS BCON ON BCON.CONTRACTNAME = EBIC.ContractName AND BCON.TERMINALID = BT.TERMINALID AND BCON.CUSTOMERID = BC.CustomerID 
INNER JOIN BUDTANKS BTANK ON BTANK.TERMINALID = BT.TERMINALID 
LEFT JOIN BudContractSummary BCS ON BCS.TankID = BTANK.TANKID AND BCS.ContractID = BCON.CONTRACTID 

ответ

1

Чтобы получить записи, которые не в BudContractSummary с той же TankID и ContractID, добавьте WHERE условие, которое ищет BCS.TankID IS NULL, как и :

WHERE BCS.TankID IS NULL 

Так как вы сделали левый присоединиться к этой таблице, используя как TankID и ContractID, ГДЕ условие устранит эти записи из результирующего набора.

+0

так просто проверить идентификационный номер бака null или мне нужно проверить как резервуар, так и контрактный номер null? – user1030181

+1

вы хотите проверить поле, всегда имеющее значение в BudContractSummary. Я предполагаю, что как танкид, так и контракт всегда имеют значение, и в этом случае вы можете использовать любое поле в том условии. нет необходимости использовать оба. –

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