Запрос, который вы вставили выше, будет содержать только UPDATE
строк для IDRoom= 1
, которые имеют точное значение lun
для giorni.Nome
.
Когда вы используете оператор LIKE
, он обычно связан с подстановочным знаком (%
).Если вы измените его на WHERE giorni.Nome LIKE 'lun%'
, то это будет соответствовать всему, что начинается с lun
.Только будьте осторожны, он может быть чувствителен к регистру.
Если ваш исходный запрос не работает, есть разные способы сделать то же самое, чтобы увидеть, дает ли он результаты, которые вы хотите.Вот один из них:
UPDATE room
SET StatoBloccato = true,
Aperto = true,
OrarioApertura = '09:00:00',
OrarioChiusura = '19:00:00'
WHERE IDRoom = 1 -- Only update "room 1"
AND EXISTS ( -- Check other before updating "room 1"
SELECT 1
FROM giorni
INNER JOIN aperture ON (giorni.FKApertura = aperture.IDApertura)
WHERE giorni.Nome LIKE 'lun'
AND giorni.FKRoom = 1
)
SQL Fiddle
Обновление
Поскольку вы хотите обновить несколько таблиц одновременно, у вас есть парапараметры:
1) Возврат к мульти-таблице UPDATE
с парой модификаций:
- добавление
giorni
таблицы в список таблиц - уточнение столбцов в
SET
список - добавление подстановочного знака (
%
) к оператору LIKE
UPDATE room r, giorni g
SET r.StatoBloccato = true,
g.Aperto = true,
g.OrarioApertura = '09:00:00',
g.OrarioChiusura = '19:00:00'
WHERE r.IDRoom = g.FKRoom
AND g.Nome LIKE 'Lun%'
AND r.IDRoom = 1;
MySQL - обновление нескольких таблиц
2) Добавьте секунду UPDATE
и запустите обе в одной транзакции
START TRANSACTION;
UPDATE room
SET StatoBloccato = true
WHERE IDRoom = 1 -- Only update "room 1"
AND EXISTS ( -- Check other before updating "room 1"
SELECT 1
FROM giorni
INNER JOIN aperture ON (giorni.FKApertura = aperture.IDApertura)
WHERE giorni.Nome LIKE 'lun%'
AND giorni.FKRoom = 1
)
UPDATE giorni
SET Aperto = true,
OrarioApertura = '09:00:00',
OrarioChiusura = '19:00:00'
WHERE FKRoom = 1 -- Only update "room 1"
AND EXISTS ( -- Check other before updating "room 1"
SELECT 1
FROM giorni
INNER JOIN aperture ON (giorni.FKApertura = aperture.IDApertura)
WHERE giorni.Nome LIKE 'lun%'
AND giorni.FKRoom = 1
)
COMMIT;