Sql 如何从执行AND操作切换到OR操作?
现在,这个查询在名为article的表中搜索标题和摘要字段中包含某个关键字的条目。它返回的集合是包含关键字的标题和摘要的文章,但我想更改它,以便它返回包含关键字的标题或摘要的文章。我将如何做到这一点?通过简单地将内部联接更改为外部联接Sql 如何从执行AND操作切换到OR操作?,sql,sql-server,tsql,Sql,Sql Server,Tsql,现在,这个查询在名为article的表中搜索标题和摘要字段中包含某个关键字的条目。它返回的集合是包含关键字的标题和摘要的文章,但我想更改它,以便它返回包含关键字的标题或摘要的文章。我将如何做到这一点?通过简单地将内部联接更改为外部联接 BEGIN with articlesearch as ( SELECT top 1000 FT_TBL.articleID, FT_TBL.title,FT_TBL.abstract,FT_TBL.publicationdate,
BEGIN
with articlesearch as (
SELECT top 1000 FT_TBL.articleID, FT_TBL.title,FT_TBL.abstract,FT_TBL.publicationdate,
(select j.journalID from journal j where FT_TBL.journalID=j.journalID) as sourceID,
(select j.journalname from journal j where FT_TBL.journalID=j.journalID) as sourcename,
(select j2.medabbr from journal j2 where FT_TBL.journalID=j2.journalID) as medabbr,
(select j1.impactfactor from journal j1 where FT_TBL.journalID=j1.journalID) as impactfactor,
KEY_TBL.RANK,
ROW_NUMBER() OVER (ORDER BY KEY_TBL.RANK desc) AS RowNumber
FROM article AS FT_TBL
INNER JOIN
CONTAINSTABLE(article,title,@keyword) AS KEY_TBL
ON FT_TBL.articleID = KEY_TBL.[KEY]
INNER JOIN
CONTAINSTABLE(article,abstract,@keyword) AS KEY_TBL2
ON FT_TBL.articleID = KEY_TBL2.[KEY]
where FT_TBL.inactive=0
ORDER BY RANK DESC
)
SELECT articleID, sourcename,title,abstract,publicationdate,medabbr
FROM articlesearch
WHERE RowNumber BETWEEN @RowStart AND @RowEnd ORDER BY publicationdate desc;
END
看起来您可以将每个节点上的
内部连接
更改为左连接
,这将满足您的需要。尽管我承认我对CONTAINSTABLE不熟悉,但以下版本将内部连接更改为左侧外部连接,并添加了where
子句以获得所需内容:
with articlesearch as (
SELECT top 1000 FT_TBL.articleID, FT_TBL.title,FT_TBL.abstract,FT_TBL.publicationdate,
(select j.journalID from journal j where FT_TBL.journalID=j.journalID) as sourceID,
(select j.journalname from journal j where FT_TBL.journalID=j.journalID) as sourcename,
(select j2.medabbr from journal j2 where FT_TBL.journalID=j2.journalID) as medabbr,
(select j1.impactfactor from journal j1 where FT_TBL.journalID=j1.journalID) as impactfactor,
KEY_TBL.RANK,
ROW_NUMBER() OVER (ORDER BY KEY_TBL.RANK desc) AS RowNumber
FROM article AS FT_TBL
left outer JOIN
CONTAINSTABLE(article,title,@keyword) AS KEY_TBL
ON FT_TBL.articleID = KEY_TBL.[KEY]
left outer join
CONTAINSTABLE(article,abstract,@keyword) AS KEY_TBL2
ON FT_TBL.articleID = KEY_TBL2.[KEY]
where FT_TBL.inactive=0 and (key_tbl.[key] is not null or key_tbl2.[key] is not null)
ORDER BY RANK DESC
)
SELECT articleID, sourcename,title,abstract,publicationdate,medabbr
FROM articlesearch
WHERE RowNumber BETWEEN @RowStart AND @RowEnd ORDER BY publicationdate desc;
正如DigitalD所指出的,您需要将内部联接
更改为外部联接
,但是您还需要在至少一个联接不为空的情况下过滤结果
-- snip
----
-- /snip
FROM article AS FT_TBL
LEFT OUTER JOIN
CONTAINSTABLE(article,title,@keyword) AS KEY_TBL
ON FT_TBL.articleID = KEY_TBL.[KEY]
LEFT OUTER JOIN
CONTAINSTABLE(article,abstract,@keyword) AS KEY_TBL2
ON FT_TBL.articleID = KEY_TBL2.[KEY]
WHERE FT_TBL.inactive=0
AND (KEY_TBL.[KEY] IS NOT NULL OR KEY_TBL2.[KEY] IS NOT NULL)
ORDER BY RANK DESC
)
-- snip
----
-- /snip
“左外连接”是打字错误吗?