У меня есть три таблицы, 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, который я делаю выше.