Вопрос присоединения к SQL - PullRequest
       5

Вопрос присоединения к SQL

2 голосов
/ 23 сентября 2010

У меня есть таблица table_a со столбцом, содержащим следующие данные:

.aaa01932
.asd02343
.lkj03342

Таким образом, он всегда начинается с периода, за которым следуют 3 буквы, за которыми следуют 2 числа (01, 02 и т. Д.)некоторыми дополнительными числами.

У меня есть еще одна таблица table_b с данными следующим образом:

aaa01
asd02
lkj03

Таким образом, он сопоставляется с данными в table_a, но с периодом и дополнительными числамив конце опущено.

Как выбрать из table_a присоединения к table_b, где данные в показанных столбцах "равны".Под равным я подразумеваю, что table_a.the_column как «% table_b.the_column%».Так что-то вроде:

Select * from table_a 
  join table_b on (table_a.the_column like '%table_b.the_column%');

За исключением того, что я не знаю, как отформатировать это предложение, чтобы принять столбец внутри.Может мне нужно как-то объединить это?

Ответы [ 3 ]

10 голосов
/ 23 сентября 2010

Синтаксис для LIKE будет:

table_a.the_column like '%' || table_b.the_column || '%'

Альтернативой будет SUBSTR:

table_b.the_column = substr(table_a.the_column,2,5)

Как уже говорилось в некоторых комментариях, SUBSTR - лучший метод по двум причинам:

  • Может быть проиндексировано:

    создать индекс для table_a (substr (the_column, 2,5));

  • Точнее: вы хотите соответствовать только в этой позиции, а не в любом месте в столбце

2 голосов
/ 23 сентября 2010

Попробуйте это:

Select * from table_a 
  join table_b on (table_a.the_column like '%' || table_b.the_column || '%');
1 голос
/ 23 сентября 2010
join table_b on substr(table_a.column,1) = table_b.column
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...