Допустим, у вас есть следующие две таблицы:
X Таблица
X_ID Y_ID_F X_Value
1 1 Q
2 1 G
3 1 T
4 2 W
5 2 K
...
Y Таблица
Y_ID Y_Value
1 A
2 B
...
Вы хотите запросить только те свойства, у которых родительское значение Y равно A, и обновить их, чтобы вы написали запрос следующим образом (я понимаю, что запрос получше, но терпите меня):
UPDATE X set X_Value = 'O'
WHERE X_ID IN
(
select distinct X.X_ID FROM X
INNER JOIN Y ON X.Y_ID_F = Y.Y_ID
WHERE Y.Y_Value = 'A'
)
Раньше я думал, что это будет делать то, что, по-видимому, говорит: обновите строки таблицы X, в которой Y_Value объединенной таблицы Y = 'A'. Однако кажется, что X.X_ID приводит к обновлению всех строк в таблице X, а не только тех, которые, как вы думаете, ограничены предложением WHERE. Каким-то образом X.X_ID заставляет запрос полностью игнорировать попытку предложения where при ограничении набора обновляемых строк. Есть идеи, почему?
РЕДАКТИРОВАТЬ:
Я думаю, что это как-то связано с тем, как таблицы в базе данных, к которой я обращаюсь, связаны, и не так просто, как в примере, к которому я пытался это сделать.