2013-05-02 72 views
0

這有點複雜,所以我打算分解它。我試圖得到結果,但無法弄清楚查詢的樣子。前提是,用戶已經購買了一套特定的物品,他們的裝備。當他們訪問我的網站時,他們會看到用戶提交的工具包或設置。我只想向他們展示只有他們購買的裝備的裝備。他們不需要看到他們沒有裝備的裝備。我希望這是有道理的。下面是我的表是這樣的:使用SQL Server返回自定義結果

[Gear]

  • gearID是唯一的關鍵
  • 擁有所有的裝備列表(話筒,頭,效果)使用的唯一ID對每個

[Kits]

  • kitID是唯一的關鍵
  • 擁有所有用戶提交的包的列表

[KitGearLink]

此表連接[Kits][Gear]彼此。所以這張表列出了用戶提交套件的裝備。

[Users]

  • userID是所有用戶

[UserGear]

鏈接的[用戶]和[齒輪]表一起的唯一關鍵

  • 名單。這是存儲用戶的個人設備的組成部分。

    那麼,如何爲每位用戶提供記錄,以便向他們展示所有可以使用他們所擁有的設備的工具包。如果套件有用戶不擁有的東西,那麼它不會顯示它們。有任何想法嗎?

    謝謝你們!

  • 回答

    1

    也許是這樣的:

    SELECT * 
    FROM Kit k 
    WHERE k.KitID NOT IN (
        SELECT DISTINCT kg.KitID 
        FROM KitGearLink kg 
        LEFT JOIN (
         SELECT ug0.GearID 
         FROM UserGear ug0 
         WHERE ug0.UserID = @userParam 
        ) ug ON kg.GearID = ug.GearID 
        WHERE ug.GearID = null 
    ) 
    

    對於給定的用戶ID,其失敗的齒輪標識子查詢返回包加入愨用戶和套件(套件有位齒輪的用戶不具有的) 。這用於過濾系統中的套件列表。

    編輯:引入第二個子查詢,在左連接出現之前通過用戶id參數過濾用戶裝備,參見注釋。

    +0

    剛剛意識到這不起作用,因爲如果連接失敗,UserID將爲空 - 我會繼續考慮這一點! – gareththegeek 2013-05-02 16:00:44

    +0

    大聲笑...謝謝:) – Damien 2013-05-02 17:10:54

    0

    好的,你需要一個套件的列表,其中套件中的所有設備在某個時刻都與特定用戶相關聯。最好的辦法是通過SP並使用內存表。這假設您要爲特定用戶提供套件。你可以得到所有用戶的完整列表,但更昂貴和複雜....

    DECLARE @UserId as int 
    SELECT @Userid = YOURUSER 
    
    Declare @tblUserKits TABLE (
        UserId int null, 
        KitId int null, 
        GearId int null 
        ) 
    
    -- GET ALL KITS THAT A USER HAS AT LEAST ONE PART OF 
    Insert Into @tbluserkits 
        select distinct u.userid, k.kitid, k.gearid 
        from usergear u 
        inner join Kitgearlink k on u.gearid = k.gearid 
        where u.Userid = @UserId 
    
    -- DELETE ALL KITS THAT THE USER IS MISSING A PART FOR 
    Delete from @tblUserKits WHERE KitId in 
        (select distinct t.kitid 
        from @tbluserkits t 
        inner join kitgearlink k on t.kitid = k.kitid 
        left outer join usergear u on k.gearid = u.gearid 
        WHERE u.gearid is null) 
    
    -- Finally return a list of kits 
    Select distinct KitId from @tblUserKits 
    
    相關問題