Как проверить значение поля в связанной таблице? - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть две таблицы, организации и возможности, связанные отношением «один ко многим» в идентификаторе организации. Таблица возможностей содержит флаг is_active, значение 0 или 1.

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

Я написал это в mySQL:

SELECT orgreg.orgreg_id AS id, orgreg.name AS name, 
  orgreg.doit_uuid As uuid, SUM(oppreg.is_active) AS active
FROM orgreg 
INNER JOIN oppreg ON orgreg.orgreg_id = oppreg.orgreg_id
GROUP BY orgreg.orgreg_id 
ORDER BY orgreg.name ASC

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

Однако, если у организации нет возможностей, результат не возвращается.

РЕДАКТИРОВАТЬ

Могут ли участники предложить лучший способ ответить на первоначальный вопрос, в котором перечислены все организаций с элементом active, равным 0 или 1, 0, если нет возможностей или все они неактивны.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Это ответ, который я придумал, который требует только изменения типа JOIN и добавления оператора IF в исходный код, чтобы получить то, что мне нужно. Без оператора IF он вернет три возможных ответа: NULL, если нет возможностей, 0, если нет активных возможностей, или количество активных возможностей.

SELECT orgreg.orgreg_id AS id, orgreg.name AS name, 
    orgreg.doit_uuid As uuid, if(sum(oppreg.is_active), 1, 0) AS total 
FROM orgreg 
LEFT OUTER JOIN oppreg ON orgreg.orgreg_id = oppreg.orgreg_id 
GROUP BY orgreg.orgreg_id ORDER BY orgreg.name ASC

Если кто-то может упростить это, я был бы рад услышать.

0 голосов
/ 04 апреля 2020

Вам не нужно присоединяться к таблицам или агрегации, если вы хотите проверить , есть ли у какой-либо организации активные возможности . Вы можете сделать это с EXISTS:

SELECT o.orgreg_id AS id, o.name AS name, 
       o.doit_uuid As uuid, 
       EXISTS(
         SELECT 1 FROM oppreg p
         WHERE p.orgreg_id = o.orgreg_id AND p.is_active
       ) AS active
FROM orgreg o
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...