Sql 如何从执行AND操作切换到OR操作?

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,

现在,这个查询在名为article的表中搜索标题和摘要字段中包含某个关键字的条目。它返回的集合是包含关键字的标题和摘要的文章,但我想更改它,以便它返回包含关键字的标题或摘要的文章。我将如何做到这一点?通过简单地将内部联接更改为外部联接

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
“左外连接”是打字错误吗?