Определение, существует ли каждая строка в другой таблице MySQL

0

У меня есть две таблицы, которые очень похожи. Например, допустим, что каждая строка имеет два идентификационных номера и значение данных. Первый идентификационный номер может появляться один, два раза или не включаться, а второй идентификационный номер - 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 или это объединение, только что созданное в динамической памяти, и я просто буду изменять значения, которые будут удалены при завершении запроса?

  • 0
    Оператор выбора предназначен только для извлечения данных. Вам нужен надлежащий язык программирования и компоненты в этом языке программирования для создания обновляемого набора строк
  • 0
    @Shadow Я использую select, чтобы показать строки, которые я собираюсь изменить. Если бы я вместо этого использовал: UPDATE table1 SET data = whatever бы это не сработало?
Теги:

1 ответ

0
Лучший ответ

Обновите следующее:

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 * вам нужно будет выбрать конкретный столбец. Это должно работать, потому что ваш внутренний выбор находит указанную строку и передает ее в ваш оператор обновления. При этом ваш внутренний выбор должен вернуть правильную строку, в которой вы нуждаетесь, иначе будет изменена неправильная строка. Надеюсь это поможет.

  • 0
    Если в ID1 есть дубликаты, то у нас есть несколько строк с ID1 = 10, ID2 = 1 и одна строка с ID1 = 10 и ID2 = -1, будет ли это работать?
  • 0
    Да, он будет обновлять только таблицу, указанную в заявлении на Update . В этом примере table1
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню