1

有人可以帮助我使用这些条件使 SQL (ORACLE) 查询更加灵活吗?

有2张桌子:

表格1

CodeA      Year   

1112-999   2017
1113-999   2017

表 2

CodeB      Year   

1114-111   2017
1115-111   2018

然后运行这个脚本

SELECT aa.CodeA, bb.CodeB FROM Table 1 aa
JOIN Table 2 bb ON aa.Year = bb.Year
AND REGEXP_LIKE (aa.CodeA, '^111+2');

在这种情况下,结果是:

CodeA      CodeB   

1112-999   1114-111

但在这种情况下,它只需要显示第一个值,并且在运行脚本后另一列应该是空的。

例如,

CodeA      CodeB   

1112-999   NULL

但如果列“CodeB”(表 2)包含value = 1112-534,则该值应在运行相同的脚本后出现

例如,

表格1

CodeA      Year   

1112-999   2017
1113-999   2017

表 2

CodeB      Year   

1114-111   2017
1112-534   2017
1115-111   2018

运行相同的脚本后,结果应该是:

CodeA      CodeB   

1112-999   1112-534

我应该在此脚本中进行哪些更改以使其灵活(通用),具体取决于表中的输入数据?我的意思是当表 2 不包含预期值时(在本例中为 1112-534),那么结果(对于第 2 列)应该为 NULL:

CodeA      CodeB   

1112-999   NULL

并且当表 2 包含此值 ( 1112-534 ) 时,响应应为:

CodeA      CodeB   

1112-999   1112-534

这是我拥有并希望使其更灵活的脚本:

SELECT aa.CodeA, bb.CodeB FROM Table 1 aa
JOIN Table 2 bb ON aa.Year = bb.Year
AND REGEXP_LIKE (aa.CodeA, '^111+2');

请帮助我)))提前致谢。

4

1 回答 1

1

您可能会发现在过滤之前查看连接结果很有帮助:

SELECT aa.CodeA, bb.CodeB FROM Table1 aa
JOIN Table2 bb ON aa.Year = bb.Year;

您的英语语言规范不是很清楚,但它表明您需要 NULL 过滤:

SELECT aa.CodeA, bb.CodeB FROM Table1 aa
JOIN Table2 bb ON aa.Year = bb.Year
WHERE REGEXP_LIKE(aa.CodeA, '^1+2')
and bb.CodeB is not null;

另请参阅https://en.wikipedia.org/wiki/Join_(SQL)

于 2017-08-12T15:39:32.623 回答