2012-01-12 2 views
0

У меня есть две таблицы в базе данных со следующими столбцами:Проверка на несколько строк SQL

Table1

athleteId | sportTypeId 
205  | 5 
206  | 5 
206  | 6 
207  | 4 
208  | 1 
208  | 4 

Из-за ошибки я сделал (Возгласы), то вторая таблица имеет некоторая информация, как это:

Table2 *

athleteId | sportTypeId 
    205  | 4 
    206  | 4 
    207  | 4 
    208  | 4 
    NULL | 4 

Я назначил неверным athleteId некоторым спортсменам, поэтому мне нужно проверить каждую строку в Table2 и посмотреть, имеет ли она соответствующую строку в Table1. Строки, содержащие athleteId 205 и 206 из Table2 будет иметь athleteId набор для NULL (они не имеют sportTypeId из 4 в Table1). athleteId 207 и 208 (они имеют строку в Table1 с sportTypeId of 4).

Обратите внимание, что некоторые спортсмены появляются дважды в Table1.

Я использую SQL Server 2008.

Спасибо!

ответ

1

Для того чтобы быть понятным, вы просите способ удалить строки из Table2, где нет соответствующей строки в Table1, правильно? Если это так, вот как это сделать:

DELETE t2.* 
FROM Table2 AS t2 
LEFT JOIN Table1 AS t1 ON t2.athleteId = t1.athleteId AND t2.sportTypeId = t1.sportTypeId 
WHERE t1.athleteId IS NULL; 

причина, почему это происходит из-за левой присоединиться и где положение. Левое соединение приведет к тому, что t1.athleteId будет иметь значение null, если соответствующая запись не найдена в Table1.

Edit: Если вы просто хотите установить athleteId к нулю вместо того, чтобы удалить всю строку, это небольшая модификация:

UPDATE t2 
SET t2.athleteId = null 
FROM Table2 AS t2 
LEFT JOIN Table1 AS t1 ON t2.athleteId = t1.athleteId AND t2.sportTypeId = t1.sportTypeId 
WHERE t1.athleteId IS NULL; 
+0

Пытались выяснить, что именно я имел в виду «удалить» , Я думаю, что ты все-таки придерживаешь его. Благодаря! –

+0

Должно быть, в моей базе данных что-то не хватает. Я не получаю ожидаемых результатов. Будут ли значения 'NULL' в' athleteId' в 'Table2' иметь значение? Я обновил свой вопрос. Спасибо за помощь. –

+0

@TylerDeWitt Это не должно иметь никакого значения в этом случае. Можете ли вы привести пример неожиданных результатов? – ean5533

1
update table2 set athleteid = null where not exists (
    select * 
    from table1 
    where athleteid = table2.athleteid and sporttypeid = table2.sporttypeid 
) 
+0

Это работало как обаяние –

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