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

sql连接语法

王弘和
2023-03-14
问题内容

我对编写sql很陌生,并且对联接有疑问。这是一个示例选择:

select bb.name from big_box bb, middle_box mb, little_box lb
where lb.color = 'green' and lb.parent_box = mb and mb.parent_box = bb;

因此,假设我正在寻找所有嵌套在其中某个绿色小盒子的大盒子的名称。如果我理解正确,上述语法是获得与使用’join’关键字可获得的结果相同的另一种方法。

问题:上面的select语句对于正在执行的任务有效吗?如果没有,有什么更好的方法呢?语句是联接的语法糖还是它实际上在做其他事情?

如果您有任何与该主题相关的好材料的链接,我会很乐意阅读,但是由于我不确切知道该技术叫什么,因此无法进行谷歌搜索。


问题答案:

您正在使用隐式连接语法。这等效于使用JOIN关键字,但是最好完全避免使用此语法,而应使用显式联接:

SELECT bb.name
FROM big_box bb
JOIN middle_box mb ON mb.parent_box = bb.id
JOIN little_box lb ON lb.parent_box = mb.id
WHERE lb.color = 'green'

您还缺少联接条件中的列名。我猜该列称为id

如果对表进行正确索引,则这种类型的查询应该很有效。特别是在连接条件上应有外键约束,并在上有一个索引little_box.color

您的查询存在一个问题,即如果一个框内有多个绿色框,则会返回重复的行。通过在SELECT之后添加DISTINCT可以删除这些重复项。



 类似资料:
  • 问题内容: 当我的SQL语句中只有一个内部联接时,它可以很好地工作。我尝试加入第二张表,现在出现一个错误,提示存在语法错误(缺少运算符)。这是怎么了 问题答案: 对于多表联接,您必须将多余的联接嵌套在方括号中: 基本上,对于除第一个表之外的所有其他表,都需要在原始“ FROM”表之前加上一个括号,并在匹配的JOIN“ on”子句上使用一个结束括号。

  • 我需要将priorityId设置为以下。有人能建议一个sql更新语句吗?我想我需要一个由Rid和Gid组成的组或自加入 非常感谢。

  • 问题内容: 我有这两个SQL语句,我需要做的是将它们连接到一个语句中,但是当我这样做时,结果是不合适的。:/ 这就是我加入他们的方式: 这样,“ wynajecia”和“ wizyty”中的数字相同,这是错误的。:/ 编辑: 有了这段代码,我得到: 正确的输出应为: 我设法通过以下代码获得正确的答案: 但是我不是,这是解决问题的正确方法。 问题答案: 考虑以下场景: TableA记录的ID:{1、

  • 问题内容: 我在两个表之间有多对多关系。 表包含我的餐厅。 表包含不同的类别。 表包含两列,每列分别包含两个表的ID。 以下陈述是我能想到的,但没有给我我想要的输出。 我希望输出是有关餐厅的信息,并在最后一列中是类别的连接行。 问题答案: 要串联值,可以使用。xml路径解决方案有误,应使用和特殊字符。 您也可以使用变量解决方案

  • 我正在使用Hibernate 3.3和Oracle 11g开发Struts 2 Framework。我的Web项目自5个月以来一直运行良好。但是最近我面临着java.sql.SQLRecoverableException:在一些空闲时间关闭连接。我将解释以下场景...我的hibernate.cfg.xml配置是 我的HibernateSessionFactory配置是 然后在运行以下代码时出错 当

  • 我在使用Flink的SQL语法连接多个表时遇到了一些问题,其中至少有一个表具有时间属性列。 我有一个表 ,当 rowtime 用作 flink rowtime 时,它使用架构(id、value1、rowtime)。 我想将此表与使用模式(id, value 2)的表连接。连接必须在匹配时完成。 最后,我想通过使用滚动时间窗口对这个连接的结果进行分组。 仅仅使用SQL语法有可能做到这一点吗? 下面是