当前位置: 首页 > 面试题库 >

SQL条件JOIN列

呼延明朗
2023-03-14
问题内容

我想根据当前行的值确定JOIN列。

例如,我的工作表有4个日期列:offer_date,accepted_date,start_date,reported_date。

我想根据日期查询汇率。我知道reported_date永远不会为空,但这是我的最后选择,因此我有一个优先顺序要加入到exchange_rate表中。如果这是正确的方法,我不太确定如何使用CASE语句执行此操作。

INNER JOIN exchange_rate c1 ON c1.date = {{conditionally pick a column here}}

  -- use j.offer_date if not null
  -- use j.accepted_date if above is null
  -- use j.start_date if above two are null
  -- use j.reported_date if above three are null

问题答案:

尝试这样的逻辑:

INNER JOIN
exchange_rate c1
ON c1.date = coalesce(j.offer_date, j.accepted_date, j.start_date, j.reported_date)

coalesce()函数返回列表中的第一个非NULL值。



 类似资料:
  • 问题内容: 我有一个表 Cases ,它使用了来自 Workers 的三列引用。还有一个工人所属的餐桌 公司 。 以下是架构: 现在我需要每个公司的案件计数。那么是否有可能与worker建立连接并映射所有 Worker1 , Worker2 和 Worker3 列?有更好的选择和性能影响吗? 注意:一家公司的两名工人可以处理单个案件,或者所有工人可以来自不同的公司。 问题答案: 尽管联接条件通常是

  • 问题内容: 我必须从中删除与表无关的行(无效关系)。 这是我想做的,但是它当然不起作用。 错误: 您不能在FROM子句中指定目标表’guide_category’进行更新 问题答案: 由于锁定实现问题,不允许使用或引用受影响的表。 您需要在此处制作一个: 或只是使用:

  • 主要内容:语法,示例,不同的连接类型Join 是“连接”的意思,顾名思义,SQL JOIN 子句用于将两个或者多个表联合起来进行查询。 联合表时需要在每个表中选择一个字段,并对这些字段的值进行比较,值相同的两条记录将合并为一条。联合表的本质就是将不同表的记录合并起来,形成一张新表。当然,这张新表只是临时的,它仅存在于本次查询期间。 数据库中的表可以通过键将彼此联合起来,一个典型的例子是,将一个表的主键和另一个表的外键进行匹配。在表中

  • 问题内容: 将条件放入JOIN子句与WHERE子句之间是否有任何区别(性能,最佳实践等)? 例如… 您更喜欢哪一个(也许是为什么)? 问题答案: 关系代数允许子句和中的谓词可互换,因此即使带有子句的查询也可以使谓词由优化器重新排列,以便在处理过程中将它们 排除在外。 我建议您以最易读的方式编写查询。 有时,这包括使相对“不完整”并将某些条件置于简单位置,以使过滤条件列表更易于维护。 例如,代替:

  • 主要内容:语法,示例,性能问题CROSS JOIN 称为“交叉连接”或者“笛卡尔连接”。SQL CROSS JOIN 连接用于从两个或者多个连接表中返回记录集的笛卡尔积,即将左表的每一行与右表的每一行合并。 什么是笛卡尔积? 笛卡尔积(Cartesian product)是指两个集合 A 和 B 的乘积。 例如,A 集合和 B 集合分别包含如下的值: A = {1,2} B = {3,4,5} A×B 和 B×A 的结果集分别

  • 主要内容:语法,示例SQL SELF JOIN 用于将一个表和自身连接,就好像存在两个表一样。为了区分两个表,在 SQL 语句中需要至少重命名一个表。 自连接通常用于将表的某个字段与该表的同一字段的其它值进行比较。 语法 SELF JOIN 的基本语法如下: 您看,SQL 并没有 SELF JOIN 关键字,而是使用 WHERE 子句来达到自连接的目的。 示例 自连接的语法比较简单,但是结果往往不是那么容易理解,让我