извлеките значение столбца на основе значения столбца в другой таблице

#sql #database #teradata

Вопрос:

У меня есть два стола:

  • Табл. 1
  • Табл. 2

Tbl 2 содержит транзакции, выполняемые пользователями в Tbl 1 . Таблицы содержат такие данные, как следующие скриншоты.

Табл. 1Табл. 2

Я хочу выбрать данные, 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» в ответе. Есть ли у вас соответствующие индексы в ваших таблицах?