Ошибка в запросе MySQL

#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 делает это в любом случае, но в своей собственной интерпретации.