#php #mysql #syntax-error
#php #mysql #синтаксическая ошибка
Вопрос:
У меня есть три таблицы. Я пытаюсь извлечь данные из двух таблиц и вставить в третью, если существует набор обстоятельств. Когда я запускаю свой запрос, я получаю
«#1054 — Неизвестный столбец ‘rvp_to_registrants_to_events.rvp_to_registrants_id’ в предложении ‘where’ »
Вот мой запрос:
INSERT INTO rvp_to_registrants_to_events (rtr.rvp_to_registrants_id, rte.events_id)
SELECT
rtr.rvp_to_registrants_id, rte.events_id
FROM
registrants_to_events rte,rvp_to_registrants rtr
WHERE (
SELECT
rte.registrants_id, rte.events_id,
rtr.rvp_to_registrants_id, rtr.registrants_id
FROM
registrants_to_events rte,rvp_to_registrants rtr
WHERE
rte.registrants_id = rtr.registrants_id
AND (rtr.rvp_to_registrants_id != rvp_to_registrants_to_events.rvp_to_registrants_id
AND rte.events_id != rvp_to_registrants_to_events.events_id)
)
Я не могу понять, почему я получаю эту ошибку. Я уверен, что это что-то глупое, что я упускаю из виду, но любая помощь приветствуется.
Спасибо!
Согласно вводу Майкла, я обновил свой код следующим образом. Сейчас возвращаю нулевые результаты, так что я работаю над этим:
INSERT INTO rvp_to_registrants_to_events (rvp_to_registrants_id, events_id)
SELECT
rtr.rvp_to_registrants_id, rte.events_id
FROM
registrants_to_events rte
JOIN rvp_to_registrants rtr ON rte.registrants_id = rtr.registrants_id
JOIN rvp_to_registrants_to_events rtrte ON rtr.rvp_to_registrants_id = rtrte.rvp_to_registrants_id
WHERE
rte.registrants_id = rtr.registrants_id
AND
(rtr.rvp_to_registrants_id != rtrte.rvp_to_registrants_id
AND
rte.events_id != rtrte.events_id)
Комментарии:
1. Ну, есть ли в таблице
rvp_to_registrants_to_events
столбец с именемrvp_to_registrants_id
?2. да, это так. Я должен был упомянуть, что я дважды проверил имена столбцов и т. Д. На наличие опечаток
3. Всем будет проще, если вы сможете предоставить свои схемы.
Ответ №1:
Ошибка, похоже, связана с тем, что вы упомянули rvp_to_registrants_to_events
в своем WHERE
предложении, но не включили его в свой FROM
:
FROM
registrants_to_events rte,rvp_to_registrants rtr, rvp_to_registrants_to_events
WHERE
rte.registrants_id = rtr.registrants_id
AND (rtr.rvp_to_registrants_id != rvp_to_registrants_to_events.rvp_to_registrants_id
AND rte.events_id != rvp_to_registrants_to_events.events_id)
Я бы рекомендовал переопределить это с помощью правильного JOIN
синтаксиса:
FROM
registrants_to_events rte
JOIN rvp_to_registrants rtr ON rte.registrants_id = rtr.registrants_id
JOIN rvp_to_registrants_to_events ON rtr.registrants_id = rvp_to_registrants_to_events.registrants_id
-- --------------------supply the correct ON clause relationship ^^^^^^^^^^^^^^^^^^^
WHERE
-- actual selection criteria
Вам нужно будет указать фактическое отношение столбцов к ON
предложению вместо ON rtr.registrants_id = rvp_to_registrants_to_events.registrants_id
. JOIN
Предполагается, что существует общий столбец между rvp_to_registrants_to_events
и или rte
или rtr
, но это мне непонятно.
Комментарии:
1. на самом деле, я присвоил псевдоним registrants_to_event как rte. Я вообще не использовал псевдоним rvp_to_registrants_to_events.
2. @Кит Упс, см. Изменение выше. проблема в том, что вы вообще не включаете это в свое
FROM
предложение.3. Хорошо, я попробовал это и теперь получаю ошибку: #1241 — Операнд должен содержать 1 столбец (ы)
4. @Keith Трудно сказать, не имея возможности проверить себя, но я подозреваю, что это из-за
()
вWHERE
предложении. Вы четко не определили связьrvp_to_registrants_to_events
ни с одной из других таблиц.5. Спасибо, что придерживаетесь этого, Майкл. Я удалил родительские элементы, потому что понял, что логика была практически такой же без них, и я все еще получаю ту же ошибку. Как я мог бы более четко определить взаимосвязь между таблицами, поскольку я пытаюсь вставить в нее данные, а не извлекать из нее данные?
Ответ №2:
в вашем из-за причины у вас есть: registrants_to_events rte,rvp_to_registrants rtr
в вашем where причина, по которой вы используете таблицу: rvp_to_registrants_to_events
Эта таблица должна быть в вашем from причина
Комментарии:
1. Я не уверен, что следую. rvp_to_registrants_to_events — это таблица, в которую вставляются данные, registrants_to_events и rvp_to_registrants — это таблицы, из которых извлекаются данные. Я знаю, что имена таблиц громоздки, но, к сожалению, я унаследовал их от предыдущего разработчика и не могу их изменить.
2. О, я думаю, вы говорите то же самое, что и Майкл. Спасибо. Смотрите выше.
3. Спасибо Nettogrof. Я проверю это.
Ответ №3:
Для начала научитесь использовать операторы «JOIN» и псевдонимы таблиц в своем коде. Это не только упрощает использование, но и понимание. По сути, ваш sql делает это в любом случае, но в своей собственной интерпретации.