簡體   English   中英

如果存在多於1行的SQL查詢返回0

[英]SQL query if more than 1 row exsists return 0

也許有人可以幫助我解決以下問題。 我有一個查詢,返回記錄。

但是當它有1行或更多行時,我想接收0行。 我認為查詢應如下所示:

IF EXISTS(SELECT * FROM Names nm WHERE nm.Username = '%a%')
BEGIN
    -- I should return 0 rows if the query above has rows
END

如果您想要一行(如果存在)或不想要任何行,則可以執行以下操作:

SELECT *
FROM Names nm
WHERE nm.Username = '%a%' AND
      (SELECT COUNT(*) FROM Names nm WHERE nm.Username = '%a%') <= 1;

但是,這不會區分沒有匹配項和多個匹配項。

如果您只想返回帶有列結構的空結果集,則可以使用

SELECT * 
FROM Names 
WHERE 1=0

要么

SELECT TOP 0 * 
FROM Names

這兩個查詢都返回一個空的結果集,該結果集具有“名稱”表的列結構。

下面的代碼可能會有所幫助:

IF EXISTS(SELECT * FROM Names nm WHERE nm.Username = '%a%')
BEGIN
        -- It should return 0 rows if the query above has rows
        SELECT * FROM Names nm WHERE 1=2;

END

您可以像下面這樣寫。

IF EXISTS(SELECT * FROM Names nm WHERE nm.Username = '%a%')
BEGIN
     SELECT * FROM Names WHERE 1=0
END

連同戈登的答案,也許這些是有幫助的。 看起來只有在只有一個與某種模式匹配的用戶名時,您才對返回結果感興趣。

-- just the username
select min(nm.Username) as Username
from Names nm
where nm.Username = '%a%'
having count(*) = 1

-- all the columns
select * from
    (
    select *, count(*) over () as cnt
    from Names nm
    where nm.Username = '%a%'
    )
where cnt = 1

如果不想在輸出中看到cnt ,則必須列出各個列的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM