使用表列键从表中选择一个值

问题描述 投票:0回答:1

我有以下姿势表:

CREATE TABLE users
(
    id bigint NOT NULL,
    created_by character varying(255) COLLATE pg_catalog."default",
    creation_date timestamp(6) without time zone,
    default_travel_method_id character varying(255) COLLATE pg_catalog."default",
    default_shipping_address_id character varying(255) COLLATE pg_catalog."default",
    CONSTRAINT users_pkey PRIMARY KEY (id)
)

当我使用此选择从另一个表中选择列时,我在 Oracle 中使用它:

    SELECT
    created_by,
    (select reference from methods where id = default_travel_method_id) as default_travel_id,
    (select reference from addresses where id = default_shipping_address_id) as defaultShippingAddressId,
    from users;

但在姿势中我收到此错误:

ERROR:  operator does not exist: bigint = character varying
LINE 8: ...reference from methods where id = default_...
                                             ^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts. 

您知道在 Postgres 中使用列表达式从另一个表中选择值的正确方法是什么吗?

sql postgresql
1个回答
1
投票

通常您不会使用

character varying
作为外键。使用传统整数 id 字段定义表:

CREATE TABLE users
(
    id bigint NOT NULL,
    created_by character varying(255) COLLATE pg_catalog."default",
    creation_date timestamp(6) without time zone,
    default_travel_method_id int references methods(id),
    default_shipping_address_id int references addresses(id),
    CONSTRAINT users_pkey PRIMARY KEY (id)
)

然后使用 JOIN 选择,假设您的相关表有

id
reference

SELECT
  created_by,
  methods.reference AS "defaultTravel",
  addresses.reference AS "defaultShippingAddress"
FROM
  users
JOIN methods ON
  methods.id = default_travel_method_id
JOIN addresses ON
  addresses.id = default_shipping_address_id
© www.soinside.com 2019 - 2024. All rights reserved.