[英]UNION inside IF EXISTS statement not working
SELECT A, B, C FROM TUser
UNION
IF EXISTS(SELECT dataUserId FROM TUserData WHERE DataId = @dataId AND UserId = @userId)
BEGIN
SELECT @dataUserId = dataUserId FROM TUserData WHERE DataId = @dataId AND UserId = @userId
SELECT A, B, C FROM TUser WHERE UserId = dataUserId
END
你可以改變它:
SELECT @dataUserId = dataUserId FROM TUserData
WHERE DataId = @dataId AND UserId = @userId
IF (@dataUserId IS NOT NULL)
BEGIN
SELECT A, B, C FROM TUser
UNION
SELECT A, B, C FROM TUser WHERE UserId = @dataUserId
END
ELSE
SELECT A, B, C FROM TUser
那是無效的SQL。 您似乎正在嘗試編寫類似函數/存儲過程的內容。
這是UNION的工作方式( http://www.w3schools.com/SQL/sql_union.asp ):
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
兩個SELECT語句必須具有相同的列數。 列還必須具有類似的數據類型。 此外,每個SELECT語句中的列必須具有相同的順序。
工會使用錯誤。 您在聯合中匯總的所有表必須具有相同的列。 更像是:
SELECT A, B, C FROM TUser
UNION
SELECT A, B, C FROM TUser WHERE UserId = dataUserId
您可以在WHERE子句中使用exists而不是IF語句:
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
WHERE EXISTS (SELECT columns FROM table_name3)
你不能在這樣的union
使用if
語句。
您可以簡單地使用inner join
而不是使用if exists
:
select A, B, C from TUser
union
select u.A, u.B, u.C from TUser u
inner join TUserData t on t.dataUserId = u.UserId
where t.DataId = @dataId and t.UserId = @userId
但是,使用內連接時有一個小的區別。 如果您碰巧匹配TUserData表中的多個記錄,它將不會隨機丟棄所有結果,除了select @dataUserId=...
之外的所有結果,而是返回每個匹配的結果。
(請注意,聯合在當前形式中是沒有意義的。當您從第一個查詢中獲取表中的所有記錄時,您在第二個查詢中獲得的任何內容都只是重復的,但我想您只是簡化了第一個查詢,並且它實際上並沒有從表中得到所有東西。)
SELECT A, B, C
FROM TUser
UNION
SELECT u.A, u.B, u.C
FROM TUser AS u
JOIN TUserData AS d ON u.UserId = d.dataUserId
WHERE d.UserId = @userId
AND d.DataId = @dataId
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.