sql—连接两个没有公共键的表的正确方法,并且在没有匹配项时保留空值

vyu0f0g1  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(338)

我是sql新手,意识到这可能不是rocket science,但我有两个表,第一个表有一个可变标题\u name,我想从中提取主题(不能使用regex,因为位置不同),第二个表是一个正确对应的查找表。
表1
书名(例如:英国书籍语言)
表2
主题(例如:英雄幻想)
新主题(例如:幻想)
这是我到目前为止所想到的,但是这个查询只保留匹配的行。当没有匹配项时,我怎么说我想要一个“(未设置)”的新主题值?

select
 theme_new,
from Table_1, Table_2
where title_name like concat('%',theme_old ,'%')

我非常感谢任何帮助,我尝试过的方法到目前为止都没有奏效。

5fjcxozz

5fjcxozz1#

我想你应该用一个箱子。
像这样的东西;

select
CASE 
    WHEN title_name like concat('%',theme_old ,'%') THEN theme_new 
    ELSE '(not set)' 
END
from Table_1, Table_2
slhcrj9b

slhcrj9b2#

你想要一个 left join :

select theme_new
from Table_1 t1 left join
     Table_2
     on t2.title_name like concat('%', t2.theme_old , '%')

也就是说,我不确定bigquery是否支持这种语法。
您可能需要使用:

select t1.title_name, array_agg(theme_new ignore nulls)
from (select t1.title_name, theme_new,
      from Table_1 t1 cross join
           Table_2
      where t2.title_name like concat('%', t2.theme_old , '%')
      union all
      select t1.title_name, null
      from table_1 t1
     ) t1
group by t1.title_name;

相关问题