2009-09-14 69 views
1

我正在向后查询。我有一个选择查询获取一些行...但现在我倒退工作,并希望插入有关表中的条目,以使select查询带回我插入的东西。帮我解决这个查询,插入表中的条目

选择查询:

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语句之后,如果我再次运行上面的查询,我没有看到新的条目。但是,如果我从上面的select查询,删除下列项然后我看到了新的条目:

AND (
    e.topicID != d.topicID 
    ) 

我不能换我的头周围这一点,需要一些建议。

编辑:选择a。* e.topicid,d.topicid(添加新条目后)的结果。注意新条目不会在此ResultSet

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 
+0

您可以在删除条件之前和之后发布“select a。*,e.topicId,d.topicId ...”的结果集吗?使用AND(e.topicID!= d.topicID)条件的 – Eric 2009-09-14 02:54:45

+0

还是w/out? – josh 2009-09-14 02:57:37

+0

我希望看到两者,尽管我确认没有看到'null'与一堆'left join'... – Eric 2009-09-14 03:05:29

回答

1

好吧显示,这里是发生了什么。

当你在那里有这种情况时,你在e的查询中得到了null s,随后用它来回拉f,然后过滤。埃尔戈,你正在做一个inner join,但以迂回的方式去做。

更新:

因此,项添加包含:

a.catalogid = 297 
a.topicid = top398 

d.catalogid = 298 
d.topicid = top398 

e.catalogid = 299 
e.topicid = top400 

所以,当a加入到d,它会通过topicid,你瞧,发现的东西。然后dcatalogid298),并将其匹配到e。除此之外,e没有找到任何东西,所以返回null。然后f尝试加入e.topicid。不幸的是,e.topicidnull,但where子句中有f.parentid值。因此,该行被滤除。

+0

我刚刚添加了:1)catalogID ='297'到目录表。 2)topicID ='top398'放入catalog_lu_topics。 3)topicID ='top399'再次进入catalog_lu_topics。 4)catalogid ='298'放入catalog_topics 5)catalogid ='299'再次放入catalog_topics。 – josh 2009-09-14 03:51:16

+0

仅返回一个主题(398),因此失败了'e.topicid!= d.topicid'条件,使其'f.parentid null',使其在查询中消失。 – Eric 2009-09-14 03:51:25

+0

啊,看到'e'和'd'匹配'd.catalogid',唯一''d.catalogid'带'topid'的'topicid','a.topicid','298 '。因此,由于只有一个符合这些标准的'topic'行,它会被'e.topicid!= d.topicid'过滤掉。 – Eric 2009-09-14 03:54:54