Как использовать конструкцию CASE WHEN THEN?

Как правильно сформулировать запрос при замене четырех полей в трех разных строках так, чтобы не повторять один и тот же ID несколько раз в выражении WHERE? Нужно ли повторять ID в выражении IN столько раз, сколько полей будет изменено в одной строке, или можно указать ID один раз, независимо от количества изменяемых полей в одной строке?
  • 20 апреля 2024 г. 14:40
Ответы на вопрос 2
Для использования конструкции CASE WHEN THEN в запросе SQL, необходимо следовать следующему синтаксису:

```sql
SELECT 
    CASE
        WHEN condition1 THEN result1
        WHEN condition2 THEN result2
        ...
        ELSE default_result
    END AS alias
FROM table_name;
```

Пример использования конструкции CASE WHEN THEN для замены значений полей в зависимости от условий:

```sql
SELECT 
    CASE
        WHEN column1 = 'value1' THEN 'new_value1'
        WHEN column2 = 'value2' THEN 'new_value2'
        ELSE 'default_value'
    END AS new_column
FROM table_name;
```

Чтобы правильно сформулировать запрос при замене четырех полей в трех разных строках так, чтобы не повторять один и тот же ID несколько раз в выражении WHERE, можно использовать подзапрос или JOIN для объединения и обновления нужных строк. Необязательно повторять один и тот же ID в выражении IN столько раз, сколько полей будет изменено в одной строке. Можно указать ID один раз и использовать логические операторы для объединения условий.

Пример запроса для замены значений полей для одного и того же ID только один раз:

```sql
UPDATE table_name
SET 
   column1 = CASE 
                WHEN condition1 THEN 'new_value1'
                ELSE column1
             END,
   column2 = CASE
                WHEN condition2 THEN 'new_value2'
                ELSE column2
             END,
   column3 = CASE
                WHEN condition3 THEN 'new_value3'
                ELSE column3
             END,
   column4 = CASE 
                WHEN condition4 THEN 'new_value4'
                ELSE column4
             END
WHERE id = your_id;
``` 

Таким образом, можно избежать повторения ID несколько раз в выражении WHERE и обновить все нужные поля для одного и того же ID.
$this->database()->query('UPDATE ' . $this->database()->getTable('ad') . ' SET view = 0 WHERE ad_id = 34');
$this->database()->query('UPDATE ' . $this->database()->getTable('ad') . ' SET view = 1 WHERE ad_id = 35');
$this->database()->query('UPDATE ' . $this->database()->getTable('ad') . ' SET view = 2, amount=466 WHERE ad_id = 36');

И не делайте себе мозги.
Вы и сейчас-то смотрите на этот запрос как баран на новые ворота. А через месяц и вовсе перестанете понимать, что имели в виду.
Похожие вопросы