2010-05-05 125 views
1

我有一個小的sql問題。來自2個表的SQL select語句

我有2個表

成員和經理

成員有:MEMBERID,姓名,地址 經理有:MEMBERID,EditRights,DeleteRights

EditRights和DeleteRights是類型位。

管理員與成員有關係,因爲他們本身就是成員。

我想選擇所有成員的ID,姓名和地址,以及經理顯示他們是否具有編輯權限和/或刪除權限的成員。

SO:

〔實施例的數據

成員:

ID, Name, Address 
1, tom, 2 flat 
2, dan, 3 flat 
3, ben, 4 flat 
4, bob, 6 flat 
5, sam, 9 flat 

經理:

ID, Editrights, deleterights 
2, 0, 1 
4, 1, 1 
5, 0, 0 

我想顯示一個選擇是這樣的:

1, tom, 2 flat, no rights 
2, dan, 3 flat, Delete 
3, ben, 4 flat, no rights 
4, bob, 6 flat, Edit&Delete 
5, sam, 9 flat, no rights 

任何幫助將是巨大的

+0

參見:http://stackoverflow.com/questions/532694/sql-select-rows-from-two-different-tables,http://stackoverflow.com/questions/231126/mysql-get -information-from-multiple-tables-in-one-query,http://stackoverflow.com/questions/1363555/help-building-a-sql-query-from-multiple-tables,http://stackoverflow.com/questions/693327/sql-how-to-join-multiple-tables,http://stackoverflow.com/questions/2485210/mysql-need-help-constructing-query-join-multiple-tables-into-single-row – outis 2010-05-05 22:23:10

+0

如果您收到滿意的答覆,則應將其標記爲正確。 – ABach 2010-05-07 14:12:20

回答

1

你想要的是左連接

5
SELECT * FROM members LEFT OUTER JOIN managers ON member.id = manager.id 

我不會推薦串聯權利列到像「無權利」的字符串 - 這是更好的東西留給演示你的應用程序的一面。以原生形式返回儘可能多的數據,以便稍後可以更輕鬆地使用它。

+1

已更新以充分利用@Andrew的洞察力:無論是否在管理器表中有條目,您都需要使用LEFT OUTER JOIN來獲取所有成員。 – ABach 2010-05-05 22:05:18

1

我認爲這更接近你所要求的。 OUTER項是讓您的成員不在Managers表中的內容。 CASE .. +東西可能需要進行一些調整才能處理您使用的任何數據庫,但您的想法是 - 如果可以,@ABach在您的演示代碼中處理此問題是正確的。

SELECT m.ID, m.Name, m.Address, 
CASE WHERE g.EditRights IS NULL AND g.deleterights IS NULL THEN 'no rights' 
ELSE 
    CASE WHERE g.Editrights = 1 THEN 'Edit' END 
    + CASE WHERE g.Editrights = 1 AND g.deleterights = 1 THEN '&' END 
    + CASE WHERE g.deleterights = 1 THEN 'Delete' END 
END AS rights 
FROM Members AS m 
LEFT OUTER JOIN Managers AS g ON g.ID = m.ID