Ошибка в запросе MySql - PullRequest
       15

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

0 голосов
/ 03 октября 2011

У меня есть три таблицы. Я пытаюсь извлечь данные из двух таблиц и вставить в третью, если существует ряд обстоятельств. Когда я запускаю свой запрос, я получаю

"# 1054 - Неизвестный столбец 'rvp_to_registrants_to_events.rvp_to_registrants_id' в 'where clause'"

Вот мой запрос:

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)

Ответы [ 3 ]

1 голос
/ 03 октября 2011

Ошибка, по-видимому, связана с тем, что вы указали 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 есть общий столбец, но мне это не ясно.

0 голосов
/ 03 октября 2011

Для начала научитесь использовать операторы "JOIN" и псевдонимы таблиц в своем коде. Это не только облегчает использование, но и понимает. По сути, ваш sql делает это в любом случае, но в своей собственной интерпретации.

0 голосов
/ 03 октября 2011

в вашем из потому что у вас есть: registrants_to_events rte, rvp_to_registrants rtr

в вашем , где , потому что вы используете таблицу: rvp_to_registrants_to_events

Thisтаблица должна быть в вашем от причина

...