Оператор выбора SQL из 2 таблиц - PullRequest
1 голос
/ 05 мая 2010

У меня небольшой вопрос sql.

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

Члены и управляющие

Участники имеют: memberID, Имя, Адрес У менеджеров есть: memberID, EditRights, DeleteRights

EditRights и DeleteRights имеют тип bit.

У менеджеров есть отношения с Участниками, потому что они сами являются членами.

Я хочу выбрать все идентификаторы участников, их имена и адреса, а также для членов, которые менеджеры показывают, если у них есть права редактирования и / или удаления.

SO:

Exmaple data

Пользователи:

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

Любая помощь будет отличной

Ответы [ 3 ]

5 голосов
/ 05 мая 2010
SELECT * FROM members LEFT OUTER JOIN managers ON member.id = manager.id

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

1 голос
/ 06 мая 2010

Я думаю, это ближе к тому, что вы просите. ВНЕШНИЙ термин - это то, что дает вам участников, которых нет в таблице менеджеров. Для работы с 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
1 голос
/ 05 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...