2017-01-25 7 views
0

Доброго дня,Match каскадное поле со списком переменных

Я пытаюсь сопоставить список адресов полеев (каскадный, чтобы дать значение ALL_ADDRESS) в отдельную таблицу, которая содержит суффиксы, потенциально сотни строк длинных ,

мой желаемый результат, чтобы показать те записи, где суффиксы являются частью переменной ALL_address (т.е. PARIS STREET)

это прекрасно работает, когда я конкатенация без объединения, но когда я начинаю присоединиться, я получаю сообщение об ошибке:

select s.suffix, 
      x.key, 
      x.B_ADDR1_TX, 
      x.B_ADDR2_TX, 
      x.B_ADDR3_TX, 
      x.b_addr_city, 
      x.b_addr_postcd, 
      x.b_addr_cntry, 
      x.b_addr_state_cd, 

     x.B_ADDR1_TX || ' ' || x.B_ADDR2_TX || ' ' || x.B_ADDR3_TX || ' ' || x.b_addr_city || ' ' || x.b_addr_postcd || ' ' || x.b_addr_cntry || ' ' || x.b_addr_state_cd as All_Address 

      from test_table AS x 

JOIN suffix_list AS s 

WHERE 

x.All_Address LIKE CONCAT('%',s.suffix,'%') ; 

любая помощь очень ценится

ответ

0

Я не уверен, что вы пытаетесь сделать. Но правильный синтаксис требует on условия для join:

from test_table x join 
    suffix_list s 
    on x.All_Address LIKE CONCAT('%', s.suffix, '%') 

Как я помню, Oracle не поддерживает as для псевдонимов таблиц, так что ваш запрос может иметь другие проблемы синтаксиса, а также.

В Oracle, это будет более типично, как написано:

from test_table x join 
    suffix_list s 
    on x.All_Address LIKE '%' || s.suffix || '%' 
+0

извинения, переключение между соединениями SQL и Oracle (длинная история) после удаления AS это все еще не работает. также я согласен, что он должен быть включен, однако оба способа можно использовать –

0

не использовали Oracle на некоторое время, но:

CREATE table t1 (
a varchar(5), 
b varchar(5), 
c varchar(5)); 
INSERT INTO t1 VALUES ('one','two','three'); 
INSERT INTO t1 VALUES ('two','nine','five'); 
INSERT INTO t1 VALUES ('two','one','one'); 

    CREATE TABLE t2 (filter varchar(5)); 
    INSERT INTO t2 VALUES ('one'); 
    INSERT INTO t2 VALUES ('six'); 


    WITH t1new AS (SELECT t1.*, a || ' ' || b || ' ' || c as address FROM t1) 

    SELECT t1new.* 
    FROM t1new,t2 
    WHERE address like CONCAT(CONCAT('%', t2.filter),'%') 

выше пример работает в liveql Oracle.

+0

, как ваш стиль, но по-прежнему та же ошибка испугана: строка ParseException 13:37 не может распознать ввод рядом с '|' '' '' '|' в выражении .... –

+0

Я также попробовал ваш пример в HUE Hive, поскольку я подумал, что это была вещь Oracle, но у меня также есть то же сообщение, что и я для моего и твоего в Oracle: Ошибка при компиляции оператора: FAILED: ParseException line 1:31 не может распознать ввод рядом с '|' '' '' '|' в спецификации выражения –