gpt4 book ai didi

sql - 从连接表中获取多个不同的值

转载 作者:行者123 更新时间:2023-11-29 12:33:54 26 4
gpt4 key购买 nike

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

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。

所以返回语句看起来像这样:

person_id | person_want_name | person_need_name | person_ability_name | person_willingness_name

现在我只做 4 个子查询,但必须有一种更简洁的方法来做这件事。另外,如果你想提一个更好的数据库结构,我对 future 的数据库生产持开放态度。

最佳答案

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 是唯一的异常(exception)。您可以在 MySQL 中使用 SET sql_mode = 'ANSI';

    修复此问题

    一些 RDBMS 接受额外的替代分隔符,例如 SQL 服务器的 []

  • 单引号 ' 根据 ANSI 标准分隔。一些 RDBMS(如 MySQL 或 SQL Server)容忍它们作为一般字符串分隔符围绕列名。不过,两者都不接受它们围绕表名。

  • backticks ´ 作为标识符的分隔符只是 MySQL 的怪异之处。同样,您可以在 MySQL 中使用 SET sql_mode = 'ANSI';

    修复此问题

这是一个list of databases and their respective delimiters for identifiers .

关于sql - 从连接表中获取多个不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13186889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com