Как запросить дополнительные строки на основе уже существующих в наборе результатов - PullRequest
0 голосов
/ 27 ноября 2018

Я считаю, что тема очень запутанная, поэтому позвольте мне объяснить мой вопрос на этом небольшом примере:

Допустим, у меня есть таблица Entity с полями id, feature, group_id.group_id - это ключ ссылки на другую таблицу

id | feature | group_id
-----------------------------
1  |  true   | group_1

2  |  false  | group_1

3  |  false  | group_2

4  |  true   | null

Не могли бы вы, ребята, предложить, как запросить все записи с помощью feature = true и добавить к нему все записи в одной группе независимо от флага функции.Таким образом, из таблицы выше результат должен быть 1 (из-за true) и 2 (потому что он имеет ту же группу, что и 1, которая передает наш предикат)

Возможно, важно знатьто, что в реальном запросе условие feature = true состоит из сотен строк, в которых / или / выбираются операторы (но сейчас, может быть, давайте просто сосредоточимся на вышеупомянутом простом примере).

ОБНОВЛЕНИЕ: я добавил строкус идентификатором 4, где group_id равен нулю

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Вы можете использовать EXISTS:

SELECT * FROM Entity E1
WHERE EXISTS (SELECT 1 
              FROM Entity E2 
              WHERE E1.group_id = E2.group_id 
              AND E2.feature = 'true'
              )
0 голосов
/ 27 ноября 2018

это будет работать:

select * from Entity where group_id in (select group_id from Entity where feature = 
'true');
0 голосов
/ 27 ноября 2018

Вы можете использовать предложение IN:

SELECT * FROM Entity
WHERE group_id IN (SELECT group_id FROM entity WHERE feature = true)

В случае, если group_id может быть нулевым для MySQL, вы можете использовать:

SELECT * FROM Entity
WHERE IFNULL(group_id, 0) IN (SELECT IFNULL(group_id, 0) FROM entity WHERE feature = true)

(Таким образом, он преобразует NULL в 0, что означаетон по-прежнему работает с предложением in. Однако убедитесь, что group_id никогда не равен 0, иначе это может привести к сбою. Вместо этого можно использовать -1.)

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