我有两张表T1
和T2
Senario 1:
表T1具有列C1,其值为terminal1,terminal2,terminal3
从T1中选择C1
候机楼
候机楼
Terminal3
表T2的列C2的值为terminal1,terminal2
从T2中选择C2
候机楼
候机楼
Senario 2
表T2有时可以为空
从T2中选择C2
(空)
(空)
我的输出必须
当Senario 1然后
候机楼
候机楼
当Senario 2然后
候机楼
候机楼
Terminal3
即当表T1和T2具有共同的值时,我只想要匹配的值
和
当表T2具有空值时,我想要所有值 来自表T1
答案 0 :(得分:0)
您的问题需要一些正确的格式,并详细说明您所面临的问题。我假设,您需要一个语句,它显示了哪些值相交,如果它们不相交 - 只显示表A.对于该子句,您需要使用内部连接和案例结构。例如:
select
ter."HEATHROW_TERMINAL",
case
when lok."HEATHROW_TERMINAL" is not null then
'Terminal is in both tables'
else
'Terminalis only in main table'
end terminal_state
from
test_terminal_v ter,
test_lookup_v lok
where
ter."HEATHROW_TERMINAL" = lok."HEATHROW_TERMINAL"(+)
,test_terminal_v(A)具有值" 5"," 4"," 2"," 3"和test_lookup_v(B)有" 4"," 2"," 3"。 希望它有所帮助。
评论后:有几种方法。 1)您可以使用临时表。创建一个,代码是:
begin
insert into test_term_tmp
select
ter.terminal
from
test_terminal_v ter,
test_lookup_v lok
where
ter.terminal = lok.terminal;
if sql%rowcount = 0 then
insert into TEST_TERM_TMP
select
ter.terminal
from
test_terminal_v ter;
end if;
end;
或2)使用类型,例如:
declare
type t_term_tab is table of number index by binary_integer;
l_term t_term_tab;
l_i number := 1;
begin
for l_rec1 in (
select
ter.terminal
from
test_terminal_v ter,
test_lookup_v lok
where
ter.terminal = lok.terminal)
loop
l_term(l_i) := l_rec1.terminal;
l_i := l_i + 1;
end loop;
if l_term.first is null then
l_i := 1;
for l_rec2 in (
select
ter.terminal
from
test_terminal_v ter)
loop
l_term(l_i) := l_rec2.terminal;
l_i := l_i + 1;
end loop;
end if;
end;
根据您的数据测试效果。希望它有所帮助。
答案 1 :(得分:0)
看来你需要的是一个左外连接。外连接允许我们有条件地连接表。
此版本的查询将针对STORE_TERMINAL_LOCATION
中的所有行返回SP_RETAIL_TRANSACTION
,并仅匹配SP_TEMP_LOOKUP.AIRPORT_TERMINAL
的值。
SELECT DISTINCT A.STORE_TERMINAL_LOCATION, B.AIRPORT_TERMINAL
FROM SP_RETAIL_TRANSACTION A,
left outer join SP_TEMP_LOOKUP B
on A.STORE_TERMINAL_LOCATION = B.AIRPORT_TERMINAL
答案 2 :(得分:0)
谢谢大家,我想我找到了答案
选择不同的T1.C1,T2.C2
来自T1,T2
其中T2.C2 = T1.C1或T2.C2为空;
我的代码中的位置是
选择不同的A.STORE_TERMINAL_LOCATION,B.AIRPORT_TERMINAL
来自SP_RETAIL_TRANSACTION A,SP_TEMP_LOOKUP B
其中B.AIRPORT_TERMINAL = A.STORE_TERMINAL_LOCATION或B.AIRPORT_TERMINAL为空;