![](/img/trans.png)
[英]SQL query to return more than one copy of same row, if hit on more than one where clause
[英]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.