我有一个小问题。
我有2张桌子
会员和经理
成员有:memberID,姓名,地址 经理有:memberID,EditRights,DeleteRights
EditRights和DeleteRights的类型为bit。
Mangers与会员有关系,因为他们本身就是会员。
我想选择所有成员的ID,姓名和地址,以及管理员显示的成员,如果他们有编辑权和/或删除权。
SO:
Exmaple数据
成员:
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 :(得分:5)
SELECT * FROM members LEFT OUTER JOIN managers ON member.id = manager.id
我不建议将权限列连接到像“无权限”这样的字符串中 - 这样可以更好地留给应用程序的表示方。以原生形式返回尽可能多的数据,以便以后更轻松地使用它。
答案 1 :(得分:1)
你想要的是一个左连接
答案 2 :(得分: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