我有以下姿势表:
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 中使用列表达式从另一个表中选择值的正确方法是什么吗?
通常您不会使用
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