帮我解决此查询以在表中插入条目

时间:2009-09-14 02:49:07

标签: mysql

我正在向后查询。我有一个选择查询,提取一些行...但现在我正在向后工作,并希望在相关的表中插入条目,以便选择查询带回我插入的东西。

选择查询:

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)

如果我再次运行上述查询,则在insert语句之后,我看不到新条目。但是,如果我从上面的选择查询中删除以下条目,那么我会看到新条目:

AND (
    e.topicID != d.topicID
    )

我无法绕过这个并需要一些建议。

编辑:选择a。* 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 个答案:

答案 0 :(得分:1)

好的,这就是发生的事情。

如果您遇到这种情况,那么您的查询中null会收到ef,后者随后用于撤回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获取298e),并将其与e匹配。除了,null找不到任何内容,因此返回f。然后e.topicid尝试加入e.topicid。遗憾的是,nullf.parentid,但where子句中有{{1}}个值。因此,此行被过滤掉了。