У меня есть 2 таблицы со следующими данными
ManualVersions - список всех ручных версий
+------------------+---------------+--------------+
|Id | ManualID | VersionNumber | VersionName |
+-----+------------+---------------+--------------+
|10 | 12 | 1.0 | Version 1 |
|17 | 12 | 2.0 | Version 2 |
CustomersManuals - Это позволяет мне узнать, какой клиент имеет доступ к каким ручным версиям
+---+---------------+--------------------+
|Id | CustomerID | ManualVersionsID |
+-- +---------------+--------------------+
|4 | 19 | 10 |
|8 | 24 | 10 |
Цель состоит в том, чтобы написать запрос, который позволит мне узнать, к каким ручным версиям клиент имеет доступ и не имеет доступа к нему.
Для этого я запускаю следующий sql для вышеуказанных таблиц.
Select CustomersManuals.id as CustomerManualsID, ManualVersions.VersionNumber, ManualVersions.VersionName, ManualVersions.id as ManualVersionID
FROM CustomersManuals
RIGHT OUTER JOIN ManualVersions ON CustomersManuals.ManualVersionsID = ManualVersions.id
WHERE (CustomersManuals.CustomerID=24 OR CustomersManuals.CustomerID iS NULL) AND ManualVersions.ManualID = 12
Результаты сверху SQL
+-------------------+--------------+---------------+----------------+
|CustomerManualsID | VersionNumber| VersionName | ManualVersionID|
+-------------------+--------------+---------------+----------------+
| 8 | 1.0 | Version 1 | 10 |
| NULL | 2.0 | Version 2 | 17 |
Вышеприведенное верно и делает то, что я хочу. Возвращается значение NULL, показывающее, что customerID 24 не имеет руководства 2.
Если я сейчас вставлю следующую строку в таблицу CustomersManuals, приведенный выше SQL не будет работать
CustomersManuals (строка, в которую я вставлен)
+----+------------+------------------+
| Id | CustomerID | ManualVersionsID |
+----+------------+------------------+
|30 | 18 | 17 |
Приведенный выше sql теперь возвращает только 1 строку
+-------------------+---------------+---------------+---------------------+
| CustomerManualsID | VersionNumber | VersionName | ManualVersionID |
+-------------------+---------------+---------------+---------------------+
| 8 | 1.0 | Version 1 | 10 |
Обратите внимание, что в приведенной выше таблице пропущена строка с нулевым значением CustomerManualsID.
Есть ли способпоказать все руководства, которые есть у клиента, и все, что у него нет?