Naikniket Ответов: 2

Как показать 0 или нулевые значения, если запись не найдена в справочной таблице


У меня есть 3 таблицы UserMaster , pagesMaster и pageRightMaster

Таблица UserMaster хранит данные пользователей,
pagesMaster хранит данные страниц,
pageRightMaster хранит записи о том, какой пользователь имеет какие разрешения.

вот структура таблицы

https://i.stack.imgur.com/9OiOR.png[^]

Теперь я хочу, чтобы отобразить все страницы от страниц, основная таблица пользователей с их разрешения. Если запись разрешения пользователя для конкретной страницы не найдена, она должна отображаться как 0.

это означает, что если пользователь выберет userid 2, то все страницы из таблицы pages_master будут отображаться вместе с его page_permissions. Если в таблице page_permission нет записи для конкретного пользователя, это означает, что у пользователя нет разрешения, и он должен отображаться как 0.

Что я уже пробовал:

Я пробовал с несколькими запросами соединения, но это тщетно

2 Ответов

Рейтинг:
1

Dominic Burford

Если вы выполняете соединение между таблицами и нет соответствующей записи, то для обозначения этого используется нулевое значение. Вместо того чтобы искать 0, ищите NULL.


Naikniket

Я использую этот запрос
выберите * из pages_mst u
левое соединение user_page_rights_mst на у.ИД = до.fk_page_id
левое соединение пользователей на.fk_userId = пользователи.идентификатор

Что дает мне все страницы с нулевыми значениями, как уже было сказано, но если я хочу видеть для конкретного пользователя

выберите * из pages_mst u
левое соединение user_page_rights_mst на у.ИД = до.fk_page_id
левое соединение пользователей на.fk_userId = пользователи.ИД, где пользователи.ИД=1

Тогда он показывает только те страницы, которые находятся в таблице разрешений. не обнуленные записи

Dominic Burford

Пользователь не возвращается в запросе при добавлении предложения WHERE. Есть ли они там до того, как вы добавите предложение WHERE?

Richard Deeming

Переместите условие в соединение:

SELECT * FROM pages_mst u
LEFT JOIN user_page_rights_mst up ON u.id = up.fk_page_id And up.fk_userId = 1
LEFT JOIN users ON up.fk_userId = users.id

Положив его в WHERE предложение запускает фильтр слишком поздно и удаляет записи, где users.id является NULL.

Рейтинг:
0

Harsh.Shah.ifour

используйте левое соединение для отображения строк из "UserMaster", которых нет в "pageRightMaster", например

select * from UserMaster us 
left join pageRightMaster pg on u.id = pg.fk_userId