2012-03-31 5 views
1

Ich habe ein Problem, SQL-Abfragen in eins zu bekommen, das Problem ist, dass ich FirstName, LastName zweimal möchte. Zuerst werden die Namen von tblUploadedImages und dann die Namen von tblImageParticipantsUnion von zwei SQL-Abfragen in SQL Server

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 

bekomme ich die richtigen Ergebnisse seine nur, dass ich es in einer SQL-Abfrage werden soll. Wie kann ich das machen?

+0

hilft Was sollte wie die Ausgabe aussehen? –

Antwort

1

Ich denke, Sie suchen nach einem UNION ALL. A UNION entfernt die Duplikate. Was ich denke, dass du willst, ist nicht die Duplikate zu entfernen.

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 

Es könnte auch ein Gott idé sein, etwas zu haben, so dass Sie wissen, was was ist. Sie können eine zusätzliche Spalte für die wie folgt hinzu:

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 

Ich hoffe, das

+0

Perfekt! Vielen Dank! – user1007103

+0

Kein Problem. Froh, zu helfen – Arion

+0

@ user1007103: Denken Sie daran, upvote, wenn Sie denken, die Antwort ist gut. Es gibt uns alle warm-fuzzy Gefühle – Arion

1

Sie können zwei Abfragen mit UNION kombinieren, aber die Spalten müssen übereinstimmen (Anzahl der Spalten und deren Typen).

So würde Ihre Abfrage wie folgt aussehen haben:

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 

ich die zusätzlichen Spalten von der zweiten Abfrage weggelassen, so dass beide Abfragen die gleiche Anzahl von Spalten haben.

Wenn Sie die zusätzlichen Spalten von der zweiten Abfrage als auch benötigen, können Sie die zweite Abfrage lassen, wie es ist, aber „Dummy“ Spalten der ersten Abfrage hinzufügen:

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 verwendet die Spaltennamen aus der ersten Abfrage, damit die Aliase)

+0

Okey, ich werde das versuchen. Ich muss UNION nicht benutzen, wenn es einen anderen Weg gibt, vielleicht war meine Überschrift Missleading, aber ich werde es versuchen. – user1007103

+0

Ich habe es jetzt ausprobiert und ich bekomme die Namen sowohl beim Uploader als auch beim Imageteilnehmer nicht. Der tblUser.FirstName AS FirstNameUploader schreibt über den FirstNameParticipant – user1007103

+0

Ich sehe keinen FirstNameParticipant irgendwo. Bitte klären Sie. –

0

Sie könnten ein LEFT OUTER JOIN auf der tblUploadedImages Tabelle in der zweiten Abfrage, wie dies zu tun:

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 

Möglicherweise müssen Sie den anderen Tabellen einen Alias ​​zuweisen, um Mehrdeutigkeiten zu vermeiden, aber Sie können es ohne vorher versuchen.

+0

Ich habe immer noch zwei Querys, auch wenn ich Outer Join auf den TblImageParticipants verlassen habe. Wenn die Abfrage tblUser.FirstName AS FirstNameUploader, tblUser.FirstName AS Teilnehmer FROM tblUploadedImages hat, haben sie immer noch denselben Wert. – user1007103

+0

Behalten Sie den gesamten Code, den Sie jetzt in der zweiten Abfrage haben, gleich, aber fügen Sie einen ausgelassenen Join zu tblImageParticipants und einen zweiten zu tblUser hinzu, und das sollte das sein, was Sie wollen. Ich kann es tippen, wenn ich an einen echten Computer komme. Sie können als tblUser2.firstName oder was auch immer alias sein. – msigman

+0

Okey, ich warte bis du zu einem echten Computer kommst, ich kann es nicht zusammen bekommen. – user1007103