【问题标题】:Postgres Query to join two tablesPostgres查询连接两个表
【发布时间】:2019-07-01 23:17:30
【问题描述】:

我在 Postgres 数据库中有两个表。在每个表中都有一个代表相同数字的列。我尝试了一些连接查询来连接具有相似列号的两个表,但它们都没有给我预期的输出。

表 1 中的

user_id 列等于表 2 中的 Id

如何才能连接这两个表?

我也尝试过以下和其他一些查询,但没有得到我想要的

SELECT members.access_level, members.user_id FROM members INNER JOIN users ON members.user_id = users.id;

表格列如下所示,

成员表

id |access_level |source_id |user_id |type

用户表

id |email |name |username 

查询输出应如下所示:

username |name |email |access_level

【问题讨论】:

  • 您描述的查询似乎应该可以工作。当您说您没有获得预期的输出时,您的意思是这两个表中的数据似乎不匹配,或者您没有看到您想要的列?

标签: postgresql


【解决方案1】:
SELECT  u.username
        , u.name
        , u.email
        , m.access_level
FROM users u
    JOIN members m ON (u.id = m.user_id)
;

如果您想要未包含在成员表中的用户,您可以使用 LEFT JOIN 加入

为了解决您在 cmets 中提出的问题,我相信您会寻找类似以下的内容:

UPDATE members SET access_level = 'dev' WHERE access_level = '30';

这是假设列已经是text 类型。否则,您需要先使用以下方法更改数据类型:

ALTER TABLE members
    ALTER access_level SET DATA TYPE text;

【讨论】:

  • 谢谢...在 access_level 列中有整个列的预定义数字,例如 30、40、50 ...我想用 Dev、Main、Owner 等字符串替换这些数字。这可以通过查询来实现吗?
  • 您只想更新同时是用户还是所有成员的成员的值?另外,当前 access_level 列的数据类型是什么?您可能需要一个 UPDATE 查询。
  • access_level 列在成员表中,它的数字数据类型..它有 30,40 和 50 个值..我希望它们替换为 Dev、Main 和 Owner
【解决方案2】:
 SELECT users.*, members.user_id, members.acces_level 
 FROM   members 
 LEFT JOIN users 
 WHERE users.id = members.user_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 2014-11-07
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多