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

从联接表中获取多个不同的值

子车轶
2023-03-14
问题内容

没有多个子查询,我想不出一个查询此问题的好方法。我无法重组表,所以这不是一种选择。设置如下:

person:
person_id
person_want_id,
person_need_id,
person_ability_id,
person_willingness_id

person_status_types:
status_type_id
status_type_name

面对面的每个ID的类型均为person_status_types。我需要提取的是每个id的本人的status_type_name。

所以return语句看起来像这样:

person_id | person_want_name | person_need_name | person_ability_name | person_willingness_name

现在,我只在做4个子查询,但是必须有一种更清洁的方法。另外,如果您想提一个更好的数据库结构,我也很乐意为将来的数据库生产做准备。


问题答案:
SELECT p.person_id
      ,want.status_type_name AS person_want_name
      ,need.status_type_name AS person_need_name
      ,abt.status_type_name  AS person_ability_name
      ,wil.status_type_name  AS person_willingness_name
FROM person p
LEFT JOIN person_status_types want ON p.person_want_id = want.status_type_id
LEFT JOIN person_status_types need ON p.person_need_id = need.status_type_id
LEFT JOIN person_status_types abt  ON p.person_ability_id = abt.status_type_id
LEFT JOIN person_status_types wil ON p.person_willingness_id = wil.status_type_id

使用LEFT JOIN以免丢失行。
而且您不能单引号标识符(如另一个答案所示)。单引号表示值。

标识符的分隔符

由于这引发了一些辩论,因此一劳永逸地澄清一下:

  • * 根据任何ANSI标准, *双引号"分隔 标识符 。所有重要的RDBMS都 普遍 支持此功能,其中MySQL是唯一的例外。您可以使用以下方法在MySQL中修复此问题SET sql_mode = 'ANSI';

一些RDBMS接受其他替代分隔符,例如[]用于SQL Server。

  • 单引号 '限定 根据ANSI标准。一些RDBMS(例如MySQL或SQL Server)允许它们在列名周围作为通用字符串定界符。两者都不接受表名周围的内容。

  • *作为标识符分隔符的 *反引号 仅是MySQL的奇数。同样,您可以使用以下方法在MySQL中修复此问题:SET sql_mode = 'ANSI';

这是数据库及其标识符的分隔符的列表。



 类似资料:
  • 问题内容: 这是我的桌子: 每篇文章可以具有一个或多个与之关联的图像。我想在页面上显示最后40篇书面文章,以及与该文章相关的最新图像。我不知道的是如何与article_images表联接,并且仅检索单个行。 编辑:解决方案必须表现良好,这一点很重要。到目前为止,我所看到的解决方案(使用派生表)需要一分钟或更长时间才能完成。 问题答案: 在查看了其他答案之后,它帮助我意识到了一个潜在的问题。 Art

  • 问题内容: 我在单个SQL语句中从多个表中提取Sums时遇到问题。 我有三个表tblCases,tblTimesheetEntries和tblInvoices在tblCases和其他两个表之间存在一对多的关系。 我目前正在使用以下SQL语句 但是,这似乎重复了发票金额。例如,如果一个案例只有一张发票,但是说有4个时间表条目,则它将计算出发票金额的4倍作为该表的总和。 如果我将分组取出,然后运行以下

  • 问题内容: 我如何将下面的MySQL查询写入Rails ActiveRecord 我知道如何在两个表上编写联接;但是,我对如何在3个表上使用联接不是很有信心。 问题答案: 要重写您在问题中遇到的SQL查询,我认为它应该类似于以下内容(尽管我很难完全可视化您的模型关系,所以这有点猜测): …这样该方法可以同时处理两个联接以及子句,最后是调用。 作为更多参考: 如果要将多个关联加入同一模型,则可以简单

  • 我试图从跨多个工作表的考勤中找到员工ID,并将时间戳拉到单个工作表中。 我在Excel中做过类似的事情,我猜可以在谷歌表格中使用谷歌应用脚本完成。 如果有人能引导我使用谷歌表单中的内置或自定义功能,那将非常有帮助。

  • 问题内容: 如何选择多个表并从同一列联接多个行? 它不会返回,并且。我确定此SQL代码段的语法错误。 更新: 显示。移除后 它返回: 但我需要退货: 问题答案: 您可以多次连接到同一张表,而只需提供不同的别名