在Coldfusion中,我有两个数据源: dwq和prq。我在dwq中查询一个news_id,它将与prq中的pageid进行比较。
<cfquery name="dwq" datasource="cu_dsn">
SELECT NEWS_ID
FROM dw
</cfquery>
<cfquery name="prq" datasource="commonspot">
SELECT
PAGEID,
TITLE
FROM pr
WHERE (PUBLISH ='Yes' OR PUBLISH=NULL)
</cfquery>
<cfquery name="join" dbtype="query">
SELECT
prq.PAGEID,
prq.TITLE
dwq.NEWS_ID
FROM prq, dwq
where prq.pageid <> dwq.news_id
</cfquery>我需要做的是选择prq数据源中与news_id不匹配的所有记录。因为我不能在QofQ中使用JOIN,所以我希望用WHERE子句替换,但是SQL多次返回一条记录(等于dwq中的记录数)。
有没有人能帮我找出合适的SQL语句?谢谢你!!
发布于 2010-12-13 06:24:51
如果两个表dw和pr都可以通过相同的数据源获得(您的问题表明它们不是),那么Spiny Norman的第一种方法是可行的。
如果不是,您可以执行类似的操作,将第二个查询(prq)替换为:
<cfquery name="prq" datasource="commonspot">
SELECT
PAGEID,
TITLE
FROM pr
WHERE (PUBLISH ='Yes' OR PUBLISH=NULL)
AND PAGEID NOT IN (#valuelist(dwq.news_id)#)
</cfquery>这样你就不需要第三个查询(join)了。但是,对于dw中的大量行,我不确定这会有多好,而且您的DBMS可能会对它在IN中接受的it数有限制。
发布于 2010-12-13 06:11:35
嗯,我对CF或QofQ一无所知,但是在常规的SQL中,要从prq中获取与某个news_id不匹配的所有记录,您可以使用:
SELECT
prq.PAGEID,
prq.TITLE
FROM prq
WHERE prq.pageid <> {dwq.news_id} -- That is, insert the proper news_id here in the correct coldfusiony way如果你想获得所有不匹配任何dwq.news_id的prq(我想是所有不是新闻页面的页面),使用:
SELECT
prq.PAGEID,
prq.TITLE
FROM prq
WHERE prq.pageid NOT IN (
SELECT NEWS_ID
FROM dwq
)哈,祝你好运。也许我稍后会尝试了解如何在CF中做到这一点。当你发现如何让它工作时,一定要回帖!
编辑:啊,我们开始吧:如果你想遍历查询1中的news_ids并获得所有不是该新闻id的页面id(可能是指向其他项目的链接列表?),使用:
<cfloop query="dwq">
<cfquery name="prq" datasource="commonspot">
SELECT
PAGEID,
TITLE
FROM pr
WHERE (PUBLISH ='Yes' OR PUBLISH=NULL)
AND PAGEID <> #dwq.NEWS_ID#
</cfquery>
<cfdosomethingwithquery query="prq">
...
</cfdosomethingwithquery>
</cfloop>我认为。不过,这可能会使用比必要多得多的查询。
https://stackoverflow.com/questions/4424153
复制相似问题