UNION inside IF EXISTS statement does not work

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
+5
source share
6 answers

You can convert it like this:

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
+5
source

This is invalid SQL. It looks like you are trying to write something like a function / stored procedure.

This is how UNION works ( http://www.w3schools.com/SQL/sql_union.asp ):

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

Both SELECT statements must have the same number of columns. Columns must also have similar data types. In addition, the columns in each SELECT statement must be in the same order.

+2
source

. , , . - :

SELECT A, B, C FROM TUser

UNION

SELECT A, B, C FROM TUser WHERE UserId = dataUserId
0

WHERE IF:

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2 
     WHERE EXISTS (SELECT columns FROM table_name3)
0

if union.

if exists inner join:

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=..., .

( , . , , , , , .)

0
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 
0
source

All Articles