2010-01-13 104 views
0
usertable 
---- 
id, username 

grouptable 
---- 
id, groupname 

group_user 
-------- 
uid, gid 

books 
---- 
id, groupname 

輸入參數:組名,用戶名
輸出:書SQL優化搜索多對多

清單是否可以使用1個sql語句得到的書籍列表時,用戶名是內組名

問題2:任何好書推薦,掌握複雜的SQL語句..

+0

名單你不應該把兩個問題在一個... – RedFilter 2010-01-13 15:07:12

回答

1

此查詢用戶parametar給出的書單

SELECT b.id, 
FROM usertable u 
    INNER JOIN group_user gu ON gu.uid = u.id 
    INNER JOIN grouptable g ON g.id= gu.gid 
    INNER JOIN books b ON b.groupname = g.groupname 
WHERE u.username = @user_name 

此外,我認爲,如果你擁有的組名,你可以使用具有兩個參數我想選擇

SELECT b.id, 
FROM grouptable g 
    INNER JOIN books b ON b.groupname = g.groupname 
WHERE g.groupname = @group_name 

公交車不是很好想。此查詢將得到的書籍供用戶組名

SELECT b.id, 
    FROM usertable u 
     INNER JOIN group_user gu ON gu.uid = u.id 
     INNER JOIN grouptable g ON g.id= gu.gid 
       AND g.group_name = @group_name 
     INNER JOIN books b ON b.groupname = g.groupname 
    WHERE u.username = @user_name 
+0

只是爲了確認,U使用內部連接。但同一用戶可以有多個不同的書籍。內連接意味着1左表-1右表連接(全連接)在這種情況下,唯一的用戶將被列出,這是不正確的..?對不起,如果我錯了,請使用Where子句解釋 – cometta 2010-01-13 09:40:38

+0

我只留下一行usertable用戶的用戶名與參數值相同。使用內部連接我得到儘可能多的行作爲用戶的一部分。所以如果用戶在5組中,我會得到5排。然後我通過參數@group_name過濾這些組。我得到這個組的書籍清單。如果它仍不清楚它是如何工作的,只需將「b.id」替換爲「*」,並刪除所有內部連接和where子句並開始逐個添加它們以查看效果 – IordanTanev 2010-01-13 09:58:06