【问题标题】:Postgresql Query equivalent to VLookUp of ExcelPostgresql Query 相当于 Excel 的 VLookUp
【发布时间】:2015-06-23 06:38:26
【问题描述】:

我有两个表,例如 Table1Table2。 Table1 包含三个名为 nameagema​​rks 的列,其中标记列为空,我需要从 Table2 中填充。表 2 包含名为 name_enma​​rks 的两列。请注意,Table1 的行数比 Table2 的多,最终结果中只有几行可以是空白的。它类似于 Excel 的 VLookUp 功能。我正在尝试以下查询。

INSERT INTO Table1(marks)
SELECT * FROM Table2
LEFT JOIN Table1
ON Table1.name = Table2.name_en

提前致谢

【问题讨论】:

  • 不要将 DBMS 用作 Excel 电子表格。首先,根据使用情况为您的表命名。 “table1”和“table2”没有任何意义。其次,不需要在数据库中两次存储信息。您可以在需要时通过适当的查询(通常是联接)很好地获取所需的所有信息。示例:SELECT u.name, u.age, m.marks FROM table1 AS u LEFT JOIN table2 AS m ON m.name_en = u.name ;(table1 中根本不需要列“marks”。我假设 table1 有“users”信息,table2 有“marks”信息。)
  • 我实际上需要那个表中的标记
  • 也许你会。当您使用“tableX”命名表时,我们无法相信这是最好的。

标签: postgresql join


【解决方案1】:

这应该可以解决问题。

UPDATE Table1
SET marks = (SELECT Table2.marks FROM Table2 WHERE Table2.name_en = name)

您想用 Table2 中的标记值更新 Table1 的所有行。

对于 Table1 的每一行,我们获取 Table2 中 name_en 的列 marks 值,并将 Table1 的 marks 列设置为该值。

【讨论】:

  • 错误:作为表达式的子查询返回多行 SQL 状态:21000
  • 因此,您在 Table2 中有许多同名的行。 Postgres 应该如何处理这些多行?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 1970-01-01
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 2013-09-10
  • 2019-11-04
相关资源
最近更新 更多