【问题标题】:Returning value from other table in place of foreign key从其他表返回值代替外键
【发布时间】:2022-07-06 22:56:39
【问题描述】:

假设我有 3 张桌子。

table_1

id fk_table_2 fk_table_3
1 1 1

table_2

id name
1. "foo"

table_3

id name
1 "bar"

我想查询table_1 中的一行,但不是返回fk_table_2fk_table_3,有没有办法返回与各自表中的行关联的name无需单独选择字段

应该返回如下内容:

id fk_table_2 fk_table_3
1 "foo" "bar"

目前我有这个:

SELECT * FROM ((table_1
INNER JOIN table_2
ON table_1.fk = table_2.id) AS j
INNER JOIN table_3
ON table_3.id = j.fk_table_3);

返回我需要的所有数据,但结构不正确。 任何人都可以帮忙吗?谢谢。

【问题讨论】:

  • 不要使用SELECT *,只需选择您希望在SELECT 语句中显示的列。
  • 不相关,但是:查询中的所有括号完全没用
  • SELECT table_1.id, table_2.name, table_3.name from .... insted of SELECT * from ...
  • 重要部分:无需单独选择字段

标签: sql postgresql


【解决方案1】:

也许SELECT table_2.*, table_3.* FROM ... 可以满足您的需求——如果您的 DBMS 支持它——并且足以绕过您的“无需单独选择字段”限制。

否则,您是在说“我想单独选择字段而不单独选择字段”,这显然是矛盾的。到底为什么要受到这么奇怪的限制?

【讨论】:

  • 我受到这种方式的限制,因为我正在使用宏生成这些查询。必须单独选择字段非常繁琐且容易出错。我在想一种类似于 graphql 解析器的机制。
猜你喜欢
  • 2014-05-05
  • 2021-11-13
  • 1970-01-01
  • 2014-07-10
  • 1970-01-01
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多