Как записать SQL запрос?

490
10 августа 2017, 22:32

table1 [name] [value] table2 [name] [parent]

известен один name, как в table1 поменять value у тех name, у которых в table2 такой же parent как и у известного name? Можно ли вообще это сделать одним запросом update или придется сначала делать select что бы узнать parent, а потом update join

Answer 1

Добрый день! Можно вот так

UPDATE [table1]
   SET [value] = 'newvalue'
 WHERE [name] IN (SELECT t1.[name]
                    FROM [table2] t1
                   WHERE t1.[parent] = (SELECT t2.[parent]
                                          FROM [table2]
                                         WHERE t2.[name] = 'customname'))

Вариант с JOIN:

UPDATE [table1]
   SET [value] = 'newvalue'
 WHERE [name] IN
          (SELECT t2.[name]
             FROM [table2] t1
                  JOIN [table2] t2
                     ON     t1.[parent] = t2.[parent]
                        AND t1.[name] = 'customname')
Answer 2
UPDATE table1 t1, table2 t21, table2 t22
SET t1.value = 'newvalue'
WHERE t1.name = t21.name
  AND t21.parent = t22.parent
  AND t22.name = 'customname'
UPDATE table1 t1
  JOIN table2 t21 ON t1.name = t21.name
  JOIN table2 t22 ON t21.parent = t22.parent
SET t1.value = 'newvalue'
WHERE t22.name = 'customname'

UPDATE table1 t1
  JOIN table2 t21 ON t1.name = t21.name
  JOIN table2 t22 ON t21.parent = t22.parent
                 AND t22.name = 'customname'
SET t1.value = 'newvalue'
READ ALSO
JOIN по дате с округлением

JOIN по дате с округлением

Есть таблица с полем типа DATETIME, которое хранит время и дату покупки:

405
как можно вывести индексы максимумов и минимумов в матрице?

как можно вывести индексы максимумов и минимумов в матрице?

Создать программу, которая вводит c клавиатуры двумерный массив неотрицательных целых чисел, находит минимум из максимальных элементов...

449
Выполнить действие и убить все потоки

Выполнить действие и убить все потоки

Не могу сообразить, как соорудить следующую вещь

405