我正在向后查询。我有一个提取某些行的选择查询...但是现在我正在向后工作,想在相关表中插入条目,以使选择查询取回我插入的内容。

选择查询:

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
    )


我无法解决这个问题,需要一些建议。

编辑:选择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

最佳答案

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

当您具有该条件时,您将在查询中获得所有nulle,随后将其用于拉回f,然后对其进行过滤。太好了,您正在执行inner join,但以回旋方式进行。

更新:

因此,添加的条目包含:

a.catalogid = 297
a.topicid = top398

d.catalogid = 298
d.topicid = top398

e.catalogid = 299
e.topicid = top400


因此,当a加入d时,它会通过topicid,然后瞧瞧,发现了什么。然后d接受那个catalogid298),并将其匹配到e。除了e找不到任何东西,因此返回null。然后f尝试加入e.topicid。可悲的是,e.topicidnull,但是f.parentid子句中有一个where值。因此,该行将被过滤掉。

关于mysql - 帮助我解决此查询以在表中插入条目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1419484/

10-16 07:23