У меня есть три таблицы: A, B, C, где A - много одного B, а B - несколько. Мне нужен список всех C в A.
Мои таблицы выглядят примерно так: A [id, valueA, lookupB], B [id, valueB, lookupC], C [id, valueC]. Я написал запрос с двумя вложенными SELECT, но мне интересно, возможно ли сделать INNER JOIN с DISTINCT каким-то образом.
SELECT valueC
FROM C
INNER JOIN
(
SELECT DISTINCT lookupC
FROM B INNER JOIN
(
SELECT DISTINCT lookupB
FROM A
)
A2 ON B.id = A2.lookupB
)
B2 ON C.id = B2.lookupC
EDIT: Таблицы довольно большие, A - 500 тыс. Строк, B - 10 тыс. Строк, а C - 100 строк, поэтому есть много лишней информации, если я делаю базовое внутреннее соединение и использую DISTINCT в конце, например:
SELECT DISTINCT valueC
FROM
C INNER JOIN B on C.id = B.lookupB
INNER JOIN A on B.id = A.lookupB
Это очень, очень медленно (величины медленнее, чем вложенные SELECT, которые я делаю выше.