【问题标题】:Match a concatenated field to a list of variables将连接字段与变量列表匹配
【发布时间】:2017-01-25 15:28:05
【问题描述】:

下午好,

我正在尝试将地址字段列表(连接以给出值 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,'%') ;

非常感谢任何帮助

【问题讨论】:

    标签: sql oracle keyword-search


    【解决方案1】:

    我不确定您要做什么。但是正确的语法需要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 || '%'
    

    【讨论】:

    • 抱歉,删除 AS 后在 SQL 和 Oracle 连接之间切换(长篇故事)这仍然不起作用。我也同意它应该打开,但是两种方式都可以使用
    【解决方案2】:

    已经有一段时间没有使用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 中运行。

    【讨论】:

    • 喜欢你的风格,但恐怕还是同样的错误:ParseException line 13:37 cannot identify input near '|' '''''|'在表达......
    • 我还在 HUE Hive 中尝试了你的示例,因为我想知道它是否是 Oracle 的东西,但我也得到了与我在 Oracle 中为我和你的相同的消息:编译语句时出错:FAILED:ParseException第 1:31 行无法识别“|”附近的输入'''''|'在表达式规范中
    猜你喜欢
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 2014-02-08
    相关资源
    最近更新 更多