Sql (частичный) поиск в списке и получение соответствующих полей - PullRequest
1 голос
/ 10 июня 2010

У меня есть две таблицы, я хочу найти TermID в Таблице-A через TermID в Таблице-B и, если есть TermID, как в Таблице-A, а затем хочу получить таблицу результатов, как показано ниже.
TermID имеют разную длину. Нет шаблона поиска для поиска с «like%»
TermID в Таблице-A являются частью TermID в Таблице-B
С уважением,

Таблица-A

ID         TermID
101256666 126006230
101256586 126006231
101256810 126006233
101256841 126006238
101256818 126006239
101256734 1190226408
101256809 1190226409
101256585 1200096999
101256724 1200096997
101256748 1200097005

Таблица B

TermNo TermID
14 8990010901190226366F
16 8990010901190226374F
15 8990010901190226382F
18 8990010901190226408F
19 8990010901190226416F
11 8990010901200096981F
10 8990010901200096999F
12 8990010901200097005F
13 8990010901200097013F
17 8990010901260062337F

В результате я хочу получить эту таблицу;
Таблица результатов -TableA.ID TableA.TermID TableB.TermNo

A.ID      A.TermID  B.TermNo
101256734 1190226408 18
101256585 1200096999 10
101256748 1200097005 12

Ответы [ 2 ]

0 голосов
/ 10 июня 2010

Ваш ожидаемый результат неверен: TABLE_A.TERMID = 126006233 соответствует TABLE_B.TERMID = 8990010901260062337F.

В любом случае, здесь есть решение:

SQL> select a.id, a.termid, b.termno
  2  from table_a a cross join table_b b
  3  where instr(b.termid, a.termid) != 0
  4  order by b.termno
  5  /

        ID TERMID                   TERMNO
---------- -------------------- ----------
 101256585 1200096999                   10
 101256748 1200097005                   12
 101256810 126006233                    17
 101256734 1190226408                   18

SQL>

edit

Полагаю, мне лучше указать, что INSTR () - это функция Oracle.MySQL также имеет это.Но если под [sql] вы подразумевали «SQL Server», то вам следует подставить функцию CHARINDEX () .

0 голосов
/ 10 июня 2010

Почему бы что-то вроде:

select a.id
       a.termid
       b.termno
  from Table-A A
       Table-B B
 where B.TermID LIKE '%'+A.TermID+'%'

не работать?

...