Надеюсь, это имело смысл, позвольте мне уточнить:
Для программы викторины есть таблица данных отслеживания, в каждой строке которой есть ..
QuestionID и AnswerID (для каждого есть таблица). Таким образом, из-за ошибки для группы QuestionID было задано значение NULL, но QuestionID соответствующего AnswerID находится в таблице ответов.
Скажем, QuestionID равен NULL, а AnswerID - 500, если мы перейдем к таблице ответов и найдем AnswerID 500, появится столбец с идентификатором QuestionID, который должен был быть там, где значение NULL.
Поэтому в основном я хочу установить каждый NULL QuestionID равным идентификатору QuestionID, найденному в таблице ответов в строке ответа AnswerID, который находится в таблице отслеживания (та же строка, что и записываемый NULL QuestionID).
Как бы я это сделал?
UPDATE QuestionTrackings
SET QuestionID = (need some select query that will get the QuestionID from the AnswerID in this row)
WHERE QuestionID is NULL AND ... ?
Не уверен, как я смогу заставить его назначить QuestionID для QuestionID из соответствующего AnswerID ...
Ответы:
Я рекомендую проверить, какой набор результатов для обновления, перед запуском обновления (тот же запрос, только с выбором):
В частности, имеет ли каждый идентификатор ответа только 1 связанный идентификатор вопроса.
источник
update QuestionTrackings q inner join QuestionAnswers a on q.AnswerID = a.AnswerID set q.QuestionID = a.QuestionID;
похоже, тот же базовый запрос в другом порядке. есть идеи почему?UPDATE table1 NATURAL JOIN table2 SET table1.col1 = table1.col2 WHERE table2.col3 ="condition"
Без нотации обновления и соединения (не все СУБД поддерживают это) используйте:
Часто в таком запросе вам необходимо дополнить предложение WHERE предложением EXISTS, содержащим подзапрос. Это предотвращает попадание UPDATE в строки, где нет совпадений (обычно обнуление всех значений). В этом случае, поскольку отсутствующий идентификатор вопроса изменит NULL на NULL, возможно, это не имеет значения.
источник
Я не знаю, столкнулись ли вы с той же проблемой, что и я, в MySQL Workbench, но выполнение запроса с оператором
INNER JOIN
after уFROM
меня не сработало. Мне не удалось выполнить запрос, потому что программа пожаловалась наFROM
оператор.Итак, чтобы запрос работал, я изменил его на
вместо того
Думаю, мое решение - правильный синтаксис MySQL.
источник
источник
У меня был тот же вопрос. Вот рабочее решение, похожее на решение eglasius. Я использую postgresql.
Он жалуется, если q был использован вместо имени таблицы в строке 1, и ничего не должно предшествовать QuestionID в строке 2.
источник
источник
Для Mysql вы можете использовать этот запрос
ОБНОВИТЬ table1 a, table2 b SET a.coloumn = b.coloumn ГДЕ a.id = b.id
источник
Обновить данные второй таблицы в 1-й таблице необходимо для внутреннего соединения перед SET:
источник
ниже работает для mysql
источник
Я думаю, это должно сработать.
источник