#mysql #database #combinations #relationship
#mysql #База данных #комбинации #связь
Вопрос:
У меня есть четыре таблицы (A, B, C и D). Таблица «D» имеет отношение FK из трех других таблиц. Каким будет запрос для извлечения всех идентификаторов из таблицы «A», которая не имеет полных комбинаций с идентификаторами записей таблиц B и C в таблице «D»? Пример:
Таблица A
id Value
1 Orange
2 Apple
3 Lemon
4 Strawberry
6 Grape
Таблица B
id value
1 Juice
2 Ice cream
Таблица C
id Value
1 $10
2 $20
Таблица D
id IdA IdB IdC Value
1 2 2 1 Desc 1
2 2 1 1 Desc 2
3 2 2 2 Desc 3
4 2 1 2 Desc 3
5 1 1 1 Desc 4
6 3 2 1 Desc 5
Как выбрать все идентификаторы из таблицы A, которые не имеют всех возможных комбинаций (связей) в таблице D как с IdB, так и с IdC? В приведенном выше примере только IdA = 2 содержит все комбинации, поэтому запрос вернет все идентификаторы из таблицы A, кроме id = 2.
Ответ №1:
Вы можете получить недостающие комбинации, используя этот запрос:
select a.*, b.*, c.*
from tablea a cross join
tableb b cross join
tablec c left outer join
tabled d
on d.ida = a.id and d.idb = b.id and d.idc = b.id
where d.ida is null;
Если вам просто нужны недостающие значения из, tablea
которые не имеют совпадений, тогда используйте group by
и having
:
select a.*
from tablea a cross join
tableb b cross join
tablec c left outer join
tabled d
on d.ida = a.id and d.idb = b.id and d.idc = b.id
where d.ida is null
group by a.id
having sum(d.ida is null) > 0;