FROM table1 AS tb1
WHERE tb1.from = ':from'
OR tb1.to = ':to'
) AS hashes
SELECT *
FROM table2 AS tb2
INNER JOIN table3 tb3 on tb2.hash = tb3.hash
WHERE tb2.hash IN hashes
AND tb3.values IN (1)
ORDER BY hash
Вот такой запрос работает
просто я хочу убрать отсюда джоин и сделать на селектах с подзапросом - можно как-то? во втором блоке где таблица 2 и 3
подскажете как?
очень плохой запрос, если в table1 много записей будет - это просто смерть...
а как правильно сделать
Я не могу сказать как правильно сделать поскольку я не знаю что надо сделать
взять из таблицы 1 хеши опираясь на значения ФРОМ и ТУ потом пойти в таблицу 2 и найти те записи у которых хеши совпадают и потом в 3 таблицу тоже сопоставить с хешами из первой
select * from HASHES h join table1 t1 on ... join table2 t2 on ...
я уже сделал - выше показал как у меня задача убрать джоин )
убрать JOIN - не задача...
Но это вообще не стандартный (или даже обычный) SQL — что это за СУБД? И зачем Вам это нужно? И да, если в каждой записи результаты нужны поля и из table2, и из table3, то JOIN — самый адекватный способ их получить (в большинстве RDBMS)...
Clickhouse просто джоин медленно отрабатывает - поэтому на селектах делал на них быстрее намного
Скорее всего это не JOIN медленно..,
А, это вариант "планировщик запросов не нужен, жизнь и так прекрасна", понятно. ;) Так от чего конкретно Вам нужно избавиться (и учтите, что вряд ли тут многие знают vendor-specific синтаксис ClickHouse, так что Вам придётся адаптировать ответы с нормального SQL (если таковые будут))?
ТОЧНО ему нужно избавится от SELECT DISTINCT ... WHERE a = ? or b = ?
Кто его знает... То, что я писал про "планировщик" ClickHouse — не шутка, понимаете? "CH does not have proper cost-based query optimizer yet. It's your responsibility to write SQL in proper way." © разработчики
Обсуждают сегодня