2010-03-10 6 views
5
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 
+3

, 또한 노동 조합은 – hallie

+0

@hallie 모두 선택 제표에 열 같은 수 있어야한다고 :. 음, 주요 문제가 있다는 것입니다 무엇 union 지시문을 따르는 것은 select 문이 아닙니다. – Guffa

답변

5

당신은 그런 식으로 변환 할 수 있습니다

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

잘못된 조합 사용. 노동 조합에서 당기는 모든 테이블은 동일한 컬럼을 가져야합니다. 더 좋아하는 것 :

SELECT A, B, C FROM TUser 

UNION 

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

모두들 감사합니다 ... 나는 모든 해결책에서 해결책을 얻었습니다. – spj

2

그것은 잘못된 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.의 열은 동일한 순서 여야합니다.

0
당신은 사용할 수

대신 IF 문 절은 WHERE에 존재 그와 같은 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

당신은 내부 if 문을 사용할 수 없습니다

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 
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 
관련 문제