【问题标题】:How to display only matched items using JOIN如何使用 JOIN 仅显示匹配的项目
【发布时间】:2017-08-12 15:24:18
【问题描述】:

有人可以帮助我使用这些条件使 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');

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

【问题讨论】:

  • 请粘贴来自 SQL*plus 的纯文本,而不是在 stackoverflow 上呈现笨拙的 HTML。简单的DESCRIBE table 输出将比您发布的 更有帮助。

标签: sql oracle join regexp-like


【解决方案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)

【讨论】:

  • 刚刚编辑过。抱歉描述得太丑了。那是我使用表格的第一个问题。我认为该表将被自动编辑。我也更新了描述。能否请您再审查一次。我试图更清楚地表达我的想法)))
  • 请查看记录的 JOIN 变体,尤其是 en.wikipedia.org/wiki/Join_(SQL)#Outer_join 左外连接,然后查看没有 WHERE 子句正则表达式过滤的 JOIN。发布任何看起来有希望的 JOIN 结果。首先,您需要确定一个适当的 JOIN 关系,然后您可以将其过滤到仅相关的行。
  • 谢谢。我认为左外连接将解决我的问题。
  • 非常感谢您指出解决我问题的正确方法。它需要使用“LEFT OUTER JOIN”和“WHERE REGEXP_LIKE”(在我的例子中)。这是正确的脚本: SELECT aa.CodeA, bb.CodeB FROM Table1 aa JOIN Table2 bb ON bb.CodeB LIKE CONCAT(aa.CodeA ,'%') WHERE REGEXP_LIKE(aa.CodeA, '^1+2');
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 2016-08-16
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多