我正在向后查询。我有一个提取某些行的选择查询...但是现在我正在向后工作,想在相关表中插入条目,以使选择查询取回我插入的内容。
选择查询:
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
最佳答案
好的,这就是发生的事情。
当您具有该条件时,您将在查询中获得所有null
的e
,随后将其用于拉回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
接受那个catalogid
(298
),并将其匹配到e
。除了e
找不到任何东西,因此返回null
。然后f
尝试加入e.topicid
。可悲的是,e.topicid
是null
,但是f.parentid
子句中有一个where
值。因此,该行将被过滤掉。关于mysql - 帮助我解决此查询以在表中插入条目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1419484/