помогите мне разрешить этот запрос, чтобы вставить записи в таблицы - PullRequest
1 голос
/ 14 сентября 2009

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

Выберите запрос:

SELECT DISTINCT a.catalogID, a.topicID, a.topicShortName
FROM catalog_lu_topics a
LEFT JOIN catalog b ON a.catalogID = b.catalogID
LEFT JOIN catalog_topics d ON ( a.topicID = d.topicID
AND d.topicID != 'top295' )
LEFT JOIN catalog_topics e ON ( (
d.catalogID = e.catalogID
)
AND (
e.topicID != d.topicID
) )
LEFT JOIN catalog_lu_topics f ON f.topicID = e.topicID
WHERE a.displayStatus != 'hide'
AND f.parentID = 'top305'

Я вставил записи в следующие таблицы:

catalog
catalog_lu_topics (made sure that parentID = 'top305')
catalog_topics (made sure topicid is not top295)
catalog_topics (additional entry, with different topicID)

После операторов вставки, если я снова выполню вышеуказанный запрос, я не вижу новых записей. Но если я удаляю следующие записи из вышеуказанного запроса выбора, я вижу новые записи:

AND (
    e.topicID != d.topicID
    )

Я не могу обернуть голову вокруг этого и мне нужен совет.

РЕДАКТИРОВАТЬ: результат выбора. * E.topicid, d.topicid (после добавления новых записей). Обратите внимание, что новые записи не отображаются в этом наборе результатов

top335      114     Victorian Grace     top301      5   gvl107      Desc    display     2007-03-26 12:38:46     top318      top335
top329  34  Revived Georgian    top301  2   gvl107  Desc    display     2007-03-26 12:38:46     top318  top329
top338  117     DC Townhouse    top301  4   gvl107  Desc    display     2007-03-26 12:38:47     top318  top338
top329  34  Revived Georgian    top301  2   gvl107  Desc    display     2007-03-26 12:38:46     top316  top329
top336  115     Bespoke in Bethesda     top301  6   gvl107  Desc    display     2007-03-26 12:38:46     top316  top336

1 Ответ

1 голос
/ 14 сентября 2009

Хорошо, вот что происходит.

Когда у вас есть это условие, вы получаете null с в вашем запросе для всех e, который впоследствии используется для отката f, который вы затем фильтруете. Ergo, вы делаете inner join, но делаете это окольным путем.

Обновление:

Итак, добавленные записи содержали:

a.catalogid = 297
a.topicid = top398

d.catalogid = 298
d.topicid = top398

e.catalogid = 299
e.topicid = top400

Итак, когда a присоединяется к d, оно проходит через topicid, и вот, что-то находит. Затем d принимает это catalogid (298) и сопоставляет его до e. За исключением того, что e ничего не находит, поэтому возвращает null. Затем f пытается присоединиться к e.topicid. К сожалению, e.topicid - это null, но в предложении where есть значение f.parentid. Следовательно, этот ряд отфильтровывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...