2012-03-31 2 views
1

하나의 SQL 쿼리를 가져 오는 데 문제가 있습니다. 문제는 FirstName, LastName을 두 번 원하는 것입니다. 먼저 tblImageParticipantsSQL Server에서 두 SQL 쿼리의 조합

ALTER PROCEDURE GetFeaturedImages 
AS 
BEGIN 
    SELECT 
     tblUser.FirstName AS FirstNameUploader, 
     tblUser.LastName AS LastNameUploader, 
     tblUser.UserID AS UserIDUploader 
    FROM 
     tblUploadedImages 
    INNER JOIN 
     tblUser ON tblUploadedImages.UserID = tblUser.UserID 

    SELECT   
     tblUploadedImages.ImgUrl, 
     tblUploadedImages.ImgUrlOriginal, 
     tblUploadedImages.Description, 
     tblUploadedImages.ImageID, 
     tblUser.FirstName, 
     tblUser.LastName, 
     tblUploadedImages.UserID AS Uploader, 
     tblImageParticipants.UserID AS Participants 
    FROM    
     tblImageParticipants 
    INNER JOIN 
     tblUploadedImages ON tblImageParticipants.ImageID = tblUploadedImages.ImageID 
    INNER JOIN 
     tblUser ON tblImageParticipants.UserID = tblUser.UserID 
    ORDER BY 
     tblUploadedImages.Added 
END 

에서 tblUploadedImages 다음 이름에서 이름 난 바로 내가 하나 개의 SQL 쿼리에서 원하는 단지의 결과를 얻을. 어떻게해야합니까?

+0

무엇 출력과 같아야합니다 도움이되기를 바랍니다? –

답변

1

나는 당신이 UNION ALL을 찾고 있다고 생각합니다. UNION은 중복을 제거합니다. 내 생각에 당신이 원하는 것은 중복을 제거하지 않는 것입니다.

SELECT 
    tblUser.FirstName AS FirstNameUploader, 
    tblUser.LastName AS LastNameUploader, 
    tblUser.UserID AS UserIDUploader 
FROM 
    tblUploadedImages 
INNER JOIN 
    tblUser ON tblUploadedImages.UserID = tblUser.UserID 

UNION ALL 

SELECT   
    tblUser.FirstName, 
    tblUser.LastName, 
    tblUploadedImages.UserID AS Uploader 
FROM    
    tblImageParticipants 
INNER JOIN 
    tblUploadedImages ON tblImageParticipants.ImageID = tblUploadedImages.ImageID 
INNER JOIN 
    tblUser ON tblImageParticipants.UserID = tblUser.UserID 
ORDER BY 
    tblUploadedImages.Added 

그것은 또한 당신이하는 어떤 알 수 있도록 뭔가를 할 수 IDE 신을 수 있습니다. 이 같은 그것을 위해 추가 열을 추가 할 수 있습니다

SELECT tblUser.FirstName AS FirstNameUploader, tblUser.LastName AS LastNameUploader, tblUser.UserID AS UserIDUploader, 'UploadedImages' AS Type FROM tblUploadedImages INNER JOIN tblUser ON tblUploadedImages.UserID = tblUser.UserID UNION ALL SELECT tblUser.FirstName, tblUser.LastName, tblUploadedImages.UserID AS Uploader, 'ImageParticipants' AS Type FROM tblImageParticipants INNER JOIN tblUploadedImages ON tblImageParticipants.ImageID = tblUploadedImages.ImageID INNER JOIN tblUser ON tblImageParticipants.UserID = tblUser.UserID ORDER BY tblUploadedImages.Added 

내가이

+0

완벽한! 감사! – user1007103

+0

문제 없습니다. 기꺼이 도와주세요 – Arion

+0

@ user1007103 : 대답이 좋다고 생각되면 upvote를 기억하십시오. 그것은 우리에게 모든 따뜻한 퍼지 감정을줍니다. – Arion

1

두 개의 쿼리를 UNION과 결합 할 수 있지만 열 수는 일치해야합니다 (열 수와 유형).

그래서 쿼리는 다음과 같이해야합니다 : 두 쿼리는 동일한 수의 열을 가질 수 있도록

SELECT 
    tblUser.FirstName AS FirstNameUploader, 
    tblUser.LastName AS LastNameUploader, 
    tblUser.UserID AS UserIDUploader 
FROM 
    tblUploadedImages 
INNER JOIN 
    tblUser ON tblUploadedImages.UserID = tblUser.UserID 

UNION 

SELECT   
    tblUser.FirstName, 
    tblUser.LastName, 
    tblUploadedImages.UserID AS Uploader 
FROM    
    tblImageParticipants 
INNER JOIN 
    tblUploadedImages ON tblImageParticipants.ImageID = tblUploadedImages.ImageID 
INNER JOIN 
    tblUser ON tblImageParticipants.UserID = tblUser.UserID 
ORDER BY 
    tblUploadedImages.Added 

내가 두 번째 쿼리에서 추가 열을 생략. 당신은뿐만 아니라 두 번째 쿼리에서 열을 추가해야하는 경우

, 당신은 그대로 두 번째 쿼리를두고 있지만, 첫 번째 질의에 "더미"열을 추가 할 수 있습니다

SELECT 
    '' as ImgUrl, 
    '' as ImgUrlOriginal, 
    '' as Description, 
    0 as ImageID, 
    tblUser.FirstName AS FirstNameUploader, 
    tblUser.LastName AS LastNameUploader, 
    tblUser.UserID AS UserIDUploader, 
    0 as Participants 
FROM 
    tblUploadedImages 
INNER JOIN 
    tblUser ON tblUploadedImages.UserID = tblUser.UserID 

(SQL Server가 사용 이런 당신은 당신의 두번째 쿼리에서 tblUploadedImages 테이블에 LEFT OUTER JOIN을 할 수

+0

오키, 나는 그것을 시도 할 것이다. 나는 UNION을 사용하지 않아도된다. 다른 방법이있다면 어쩌면 내 머리글이 잘못되어 있지만 아마도 이것을 시도 할 것이다. – user1007103

+0

나는 지금 그것을 시도하고 나는 업 로더와 imageparticipant 둘 모두에 이름을 얻지 않는다. tblUser.FirstName AS FirstNameUploader가 FirstNameParticipant 위에 씁니다. – user1007103

+0

어디서나 FirstNameParticipant가 표시되지 않습니다. 명확히하십시오. –

0

첫 번째 쿼리에서 열 이름, 따라서 별칭) :

SELECT   
     tblUploadedImages.ImgUrl, 
     tblUploadedImages.ImgUrlOriginal, 
     tblUploadedImages.Description, 
     tblUploadedImages.ImageID, 
     tblUser.FirstName, 
     tblUser.LastName, 
     tblUploadedImages.UserID AS Uploader, 
     tblImageParticipants.UserID AS Participants, 
     u.FirstName AS FirstNameUploader, 
     u.LastName AS LastNameUploader 
    FROM    
     tblImageParticipants 
    INNER JOIN 
     tblUploadedImages ON tblImageParticipants.ImageID = tblUploadedImages.ImageID 
    INNER JOIN 
     tblUser ON tblImageParticipants.UserID = tblUser.UserID 
    LEFT OUTER JOIN 
     tblUploadedImages i ON i.UserID = tblUser.UserID 
    LEFT OUTER JOIN 
     tblUser u ON u.UserID = i.UserID 
    ORDER BY 
     tblUploadedImages.Added 

모호성을 피하기 위해 다른 테이블에 별명을 지정해야 할 수도 있지만 먼저 시도하지 않아도됩니다.

+0

tblImageParticipants에 외부 조인을 남긴 경우에도 여전히 두 개의 쿼리가 있습니다. 쿼리가 tblUser.FirstName AS FirstNameUploader 인 경우 tblUser.FirstName AS 참가자 tblUploadedImages에서 여전히 동일한 값을가집니다. – user1007103

+0

두 번째 쿼리에있는 모든 코드를 동일하게 유지하면서 tblImageParticipants에 왼쪽으로 조인하고 tblUser에 두 번째 조인을 추가하면 원하는 결과를 얻을 수 있습니다. 나는 실제 컴퓨터에 도착했을 때 그것을 타이핑 할 수있다. tblUser2.firstName 또는 별칭으로 별칭을 지정할 수 있습니다. – msigman

+0

오키, 진짜 컴퓨터에 도착할 때까지 기다릴게. 나는 함께 할 수 없다. – user1007103

관련 문제