Это не совсем понятно, что вы пытаетесь достичь, но вы можете использовать запрос следующим образом:
UPDATE cp_asseteventinquiry a
LEFT
JOIN flightlogs f
ON f.Asset = a.TopLevelAsset_Num
AND f.Scheduled_Date = DATE_FORMAT(CURDATE(), '%m/%d/%Y')
SET a.Due_Date = DATE_FORMAT(CURDATE(), '%m/%d/%Y')
WHERE a.History='NO'
AND f.Asset IS NULL
Чтобы установить Due_Date
столбец на каждой строке, которая имеет значение 'NO'
в History
колонке, и которая не имеет соответствующей строки в таблице flightlogs
, которая удовлетворяет указанным условиям.
Непонятно, почему вам нужно форматировать даты в определенном формате, если они не хранятся в столбцах типа символов, что совершенно непривычно, учитывая, что MySQL имеет тип данных, предназначенный для хранения значений даты, DATE
тип данных.
ПРИМЕЧАНИЕ: Не ставьте скобки вокруг выражений, где они не нужны, особенно если они не добавляют никакого смысла. Например, круглые скобки в данном контексте не имеет никакого значения:
SELECT DISTINCT(TopLevelAsset_Num) ...
Это эквивалентно тому, что мы обычно используем,
SELECT DISTINCT TopLevelAsset_Num ...
(Добавление скобок смешения делают вид, будто DISTINCT является функцией, принимает аргумент. DISTINCT не является функция, это ключевое слово. И это относится ко всем выражениям в списке выбора, это не имеет значения, является ли столбцы, завернутыми в круглых скобках.
Followup
Единственная причина, я могу видеть, чтобы вы получите четкий список TopLevelAsset_Num
, является то, что некоторые из строк с одинаковым значением имеют History='NO'
и друга нет. И вы хотите обновить все строк с соответствующими TopLevelAsset_Num
.
В этом случае используйте вложенное представление, чтобы получить список, и выполнить операцию присоединения:
UPDATE cp_asseteventinquiry a
JOIN (SELECT n.TopLevelAsset_Num
FROM cp_asseteventinquiry n
LEFT
JOIN flightlogs f
ON f.Asset = n.TopLevelAsset_Num
AND f.Scheduled_Date = DATE_FORMAT(CURDATE(), '%m/%d/%Y')
WHERE n.History='NO'
AND f.Asset IS NULL
) v
ON v.TopLevelAsset_Num = a.TopLevelAsset_Num
SET a.Due_Date = DATE_FORMAT(CURDATE(), '%m/%d/%Y')
Пожалуйста, выберите 1 СУБД. Вы работаете с MySql или SqlServer? – paqogomez
Почему в инструкции SELECT есть parens вокруг 'TopLevelAsset_Num'? Почему значения даты хранятся в столбцах, которые являются символьными типами данных, а не типом DATE? Почему существует пробел между именем функции 'DATE_FORMAT' и paren? – spencer7593