2016-07-05 2 views
3

У меня есть этот оператор обновления MySQL. Он работает нормально.Инструкция по обновлению MySQL после добавления дополнительного условия в WHERE

UPDATE Table1 
SET Table1_field1='field1_content', Table1_field2='field2_content' 
where Table1_field3=2 

Все поля, указанные выше, принадлежат к одной и той же таблице. Затем я добавил дополнительное условие AND Table2.fieldname='XXX' в предложении WHERE

UPDATE Table1 
SET Table1_fieldname1='field1_content', Table1_fieldname2='field2_content' 
where Table1_fieldname3=2 AND Table2.fieldname='XXX' 

На этот раз, то SQL заявление терпит неудачу. Ошибка - «неизвестный столбец Table2.fieldname в разделе where». Однако Table2.fieldname действительно существует.

+1

Какое состояние вы используете для комбинирования 'Table1' и' Table2'? – Blank

+2

Прочитать бой ОБНОВЛЕНИЕ ... ПРИСОЕДИНЯЙТЕСЬ ... – Jens

+1

Таблица2? Возможно, вам потребуется присоединиться к двум таблицам – nbirla

ответ

2

Для того, чтобы иметь возможность использовать поля из Table2 в запросе вам необходимо использовать JOIN между Table1 и Table2.

A JOIN эффективно объединяет строку из каждой таблицы в одну строку для вашего запроса на основе предоставленного условия. Например, если таблицы Table1 и Table2 имеют идентификатор таблицы columnID, мы можем комбинировать строки из каждой таблицы, где соответствуют идентификаторы tableID. Запрос будет выглядеть следующим образом:

UPDATE Table1 
JOIN Table2 
    ON Table1.tableID = Table2.tableID 
SET Table1_fieldname1='field1_content', Table1_fieldname2='field2_content' 
WHERE Table1_fieldname3=2 AND Table2.fieldname='XXX'; 

Соединить ключевое слово эквивалентно INNER JOIN. Существуют разные типы JOINs, и я бы рекомендовал их прочитать. Это ссылочное изображение, чтобы дать вам представление о разных типах: enter image description here

1

вам необходимо присоединиться к таблице 1 и таблице2; то вы можете обновить

UPDATE Table1 AS b 
INNER JOIN Table2 AS g ON b.id = g.id SET Table1_fieldname1='field1_content', Table1_fieldname2='field2_content' 
where Table1_fieldname3=2 AND g.fieldname='XXX' 
+0

b.id является первичным ключом таблицы 2, а g.id является первичным ключом таблицы 1? Будет ли этот код работать, если столбец id отсутствует в таблицах? –

+1

Нет, я просто добавил его в качестве примера, вам нужно присоединиться к нему, используя столбец предпочтений –

+0

Поймите лучше сейчас. Мне нужно посмотреть на отношения с внешним ключом. –

Смежные вопросы