У меня есть две таблицы, которые очень похожи. Например, допустим, что каждая строка имеет два идентификационных номера и значение данных. Первый идентификационный номер может появляться один, два раза или не включаться, а второй идентификационный номер - 1 или -1. Значение данных не важно, но для этого примера мы будем говорить, что это целое число. Для каждой пары идентификационных номеров может быть только одно значение данных, поэтому, если у меня есть точка данных, где идентификатор равен 10 и 1, не будет другой 10 и 1 строки с другим значением данных. Аналогично, в другой таблице точка данных с идентификаторами 10 и 1 будет такой же, как в первой таблице. Я хочу иметь возможность выбирать строки, которые существуют в обеих таблицах, ради изменения значения данных во всех строках, находящихся в обоих. Моя команда для MySQL до сих пор выглядит следующим образом:
SELECT DISTINCT * FROM schema.table1
WHERE EXISTS (SELECT * from schema.table1
WHERE schema.table1.ID1 = schema.table2.ID1
and schema.table1.ID2 = schema.table2.ID2);
Я хочу, чтобы этот код выбирал все строки в таблице1, которые также находятся в таблице2, но позволяю мне изменять значения table1.
Я понимаю, что, создав объединение двух таблиц, я могу видеть строки, которые существуют в обеих таблицах, но это позволит мне внести изменения в фактические значения данных, если я изменил значения в объединенном наборе? Например, если бы я сделал:
SELECT DISTINCT * FROM schema.table1 inner join schema.table2
WHERE schema.table1.ID1 = schema.table2.ID1
schema.table1.ID2 = schema.table2.ID2;
Если я вызову UPDATE
в строках, которые я получаю из этого запроса, будут ли изменяться фактические значения в таблице1/table2 или это объединение, только что созданное в динамической памяти, и я просто буду изменять значения, которые будут удалены при завершении запроса?
Обновите следующее:
UPDATE table1 SET data = whateverupdate
WHERE ID1 IN (SELECT ID1 from schema.table1
WHERE schema.table1.ID1 = schema.table2.ID1
and schema.table1.ID2 = schema.table2.ID2);
В вашем внутреннем операторе select вы не можете сделать select *
вам нужно будет выбрать конкретный столбец. Это должно работать, потому что ваш внутренний выбор находит указанную строку и передает ее в ваш оператор обновления. При этом ваш внутренний выбор должен вернуть правильную строку, в которой вы нуждаетесь, иначе будет изменена неправильная строка. Надеюсь это поможет.
Update
. В этом примере table1
UPDATE table1 SET data = whatever
бы это не сработало?