Sql 在join中使用case语句

Sql 在join中使用case语句,sql,Sql,我正在尝试对以下两个表进行联接: table 1 id addr 1 Mumbai 2 delhi 3 Orissa table 2 flight add y mum y del n ori 我的sql查询是: select b.flight, a.id from table2 b join table1 a on b.add = (select case when a.addr = 'Mumbai' then 'mum'

我正在尝试对以下两个表进行联接:

table 1 
id   addr
1    Mumbai
2    delhi
3    Orissa

table 2
flight  add
y       mum
y       del
n       ori
我的sql查询是:

select 
b.flight,
a.id
from table2 b
join table1 a 
on b.add = (select case when a.addr = 'Mumbai' then 'mum'
                   when a.addr = 'Delhi' then 'del
                   end);
在Netezza上运行此操作时,我遇到以下错误:

This form of correlated query is not supported - consider rewriting

有人能告诉我正确的方法吗。

case
是一个表达式,就像其他表达式一样。此处不需要相关查询,只需直接使用表达式即可:

select 
b.flight,
a.id
from table2 b
join table1 a 
on b.add = case when a.addr = 'Mumbai' then 'mum'
                when a.addr = 'Delhi' then 'del
           end;

case
是一个表达式,与任何其他表达式一样。此处不需要相关查询,只需直接使用表达式即可:

select 
b.flight,
a.id
from table2 b
join table1 a 
on b.add = case when a.addr = 'Mumbai' then 'mum'
                when a.addr = 'Delhi' then 'del
           end;

您可以根据需要使用
子字符串
下字符串

select 
b.flight,
a.id
from table2 b
join table1 a 
on b.add = SUBSTRING(LOWER(a.addr), 1, 3)

您可以根据需要使用
子字符串
下字符串

select 
b.flight,
a.id
from table2 b
join table1 a 
on b.add = SUBSTRING(LOWER(a.addr), 1, 3)

我无法判断Netezza是否支持这种连接,但您可以在子查询中移动case语句,如下所示:

select 
  b.flight,
  a.id
from table2 b join (
  select id, 
    case addr 
      when 'Mumbai' then 'mum'
      when 'Delhi' then 'del'
    end addr
  from table1 
) a on b.add = a.addr;

我无法判断Netezza是否支持这种连接,但您可以在子查询中移动case语句,如下所示:

select 
  b.flight,
  a.id
from table2 b join (
  select id, 
    case addr 
      when 'Mumbai' then 'mum'
      when 'Delhi' then 'del'
    end addr
  from table1 
) a on b.add = a.addr;

如果要查找表1中以表2中的值
add
开头的
addr
,编写此联接的一种简单方法是使用

select  b.flight
        , a.id
from    table1 as a
join    table2 as b on a.addr like b.[add] + '%'

如果要查找表1中以表2中的值
add
开头的
addr
,编写此联接的简单方法是使用

select  b.flight
        , a.id
from    table1 as a
join    table2 as b on a.addr like b.[add] + '%'

如果你只想将“孟买”与“妈妈”和“德里”与“德尔”组合在一起,那么你可以简单地查看配对:

select b.flight, a.id
from table2 b
join table1 a on (b.add = 'mum' and a.addr = 'Mumbai')
              or (b.add = 'del' and a.addr = 'delhi')
如您所见,您不需要在
中的
条件下使用
CASE WHEN
,因为您可以简单地使用

我不认识内特扎。也许它甚至支持元组:

select b.flight, a.id
from table2 b
join table1 a on (b.add, a.addr) in (('mum', 'Mumbai'), ('del', 'delhi'))

如果你只想加入“孟买”和“妈妈”以及“德里”和“德尔”,那么你可以简单地查看配对:

select b.flight, a.id
from table2 b
join table1 a on (b.add = 'mum' and a.addr = 'Mumbai')
              or (b.add = 'del' and a.addr = 'delhi')
如您所见,您不需要在
中的
条件下使用
CASE WHEN
,因为您可以简单地使用

我不认识内特扎。也许它甚至支持元组:

select b.flight, a.id
from table2 b
join table1 a on (b.add, a.addr) in (('mum', 'Mumbai'), ('del', 'delhi'))

你在用什么数据库管理系统?你在用什么数据库管理系统?你没有给他指明正确的方向。他可能需要一个3个字符的子字符串,但我会回答这个问题,所以+1@Cid当前位置看起来不是这样。在最初的调查中,他们只是想加入孟买和德里,而不是奥里萨邦。我认为这个答案是好的,因为它显示了OP他们也在思考complicatedly@ThorstenKettner我明白你的意思,没注意到奥里萨失踪了。OP可能忘记了这一点,或者这是故意的。你没有给他指明正确的方向。他可能需要一个3个字符的子字符串,但我会回答这个问题,所以+1@Cid当前位置看起来不是这样。在最初的调查中,他们只是想加入孟买和德里,而不是奥里萨邦。我认为这个答案是好的,因为它显示了OP他们也在思考complicatedly@ThorstenKettner我明白你的意思,没注意到奥里萨失踪了。OP可能忘记了,或者是故意的。谢谢你们的回答。现在很好,谢谢你们的回答。现在可以用了