Ошибка множественного удаления запроса, когда найдено 2/3 совпадений - PullRequest
0 голосов
/ 11 мая 2018

Привет, я в настоящее время работаю с 3 таблицами, где 1 запрос удаляет все строки с совпадающими идентификаторами, иногда проблема заключается в том, что третья таблица t3 не содержит никаких данных, и поэтому весь сценарий ломается.

Есть что-нибудья могу сделать, чтобы этот запрос удалялся из 2 из 3 таблиц, даже если в третьей таблице t3 нет совпадений?

DELETE t1, t2, t3
 FROM table1 t1
  table2 t2
  table3 t3
 WHERE t1.column1 = 1
 AND t2.column2 = 1
 AND t3.column3 = 1 // When this one does not have any matches the whole script fails

Простой, но, на мой взгляд, «слабый» способ сделать эторазделить его на 3 разных запроса, но это позор?

1 Ответ

0 голосов
/ 11 мая 2018

Никогда не используйте запятые в предложении FROM. Всегда используйте правильный, явный, стандартный синтаксис JOIN.

В вашем случае вы хотите LEFT JOIN:

DELETE t1, t2, t3
    FROM table1 t1 LEFT JOIN
         table2 t2
         ON t1.column = t2.column LEFT JOIN
         table3 t3
         ON t1.column = t3.column
    WHERE t1.column1 = 1;

Это будет работать для пропущенных строк в table2 и table3. Если в table1 нет подходящих строк, то ничего не будет удалено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...