#sql #database #teradata
Вопрос:
У меня есть два стола:
- Табл. 1
- Табл. 2
Tbl 2
содержит транзакции, выполняемые пользователями в Tbl 1
. Таблицы содержат такие данные, как следующие скриншоты.
Я хочу выбрать данные, Tbl 2
но вместо значения ac_to
столбца я хочу получить соответствующее uid
значение Tbl 1
.
Мои маршруты запросов таковы:
select t2.ac_from_ui, t1.ui as "ac_to_uid", t2.amt from tbl1 t1 join tbl2 t2 on t2.ac_to = t1.ac_ref
Итак, есть две вещи, которые я хочу выяснить:
- Есть ли лучший способ запрашивать и получать данные из другой таблицы на основе значения в одной таблице
- Использование приведенного выше запроса приводит к тому, что я теряю транзакции с NA в
ac_to
поле. Я хочу сохранить их
Я попытался присоединиться слева, но его производительность для огромного набора данных является проблемой для меня
Комментарии:
1. Левое соединение не должно иметь такого большого влияния на am. Это проблема с кастингом или индексированием?
2. нет, будет ли leftjoin наиболее эффективным способом сделать это?
3. Каковы данные этих столбцов? Существует ли большое количество строк NA? Проверьте, распространяется ли tbl_2.
4. Опять же, каков тип данных этих столбцов? Строка
'NA'
и цифра «5» не совпадают.5. Вы можете разделиться на объединенные выборки, добавив
where t2.ac_to = 'NA'
к #1 иwhere t2.ac_to = 'NA'
#2. Кстати, если есть статистика по t2.ac_to, оптимизатор должен автоматически применить этот метод, чтобы избежать перекоса.
Ответ №1:
Я думаю, что это стандартный или классический подход к этому. Левое соединение сохранит кортежи с «NA» в ответе. Есть ли у вас соответствующие индексы в ваших таблицах?