2010-05-05 4 views
1

У меня есть небольшой вопрос sql.SQL select statement из 2 таблиц

У меня есть 2 таблицы

Члены и Менеджеры

Пользователи имеет: MemberID, имя, адрес менеджеров: MemberID, EditRights, DeleteRights

EditRights и DeleteRights имеют тип бита.

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

Смотрите также: http://stackoverflow.com/questions/532694/sql-select-rows-from-two-different-tables, http://stackoverflow.com/questions/231126/mysql-get -информация-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-singlerow – outis

+0

Если вы получили удовлетворительный ответ, вы должны отметить его как правильно. – ABach

ответ

1

То, что вы хотите это левое соединение

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

Я бы не рекомендовал конкатенации столбцы прав в строки, как «не прав» - это что-то лучше оставить на презентацию стороне вашего приложения. Возвратите как можно больше данных в своей родной форме, чтобы вы могли более легко работать с ним позже.

+1

Обновлено, чтобы воспользоваться проницательностью @Andrew: вам нужна ЛЕВЫЙ ВНЕШНИЙ ПРИСОЕДИНЯЙТЕ, чтобы получить всех участников, независимо от того, есть ли у них запись в таблице менеджера. – ABach

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