比较 postgres 中的 UUID
Comparing UUIDs in postgres
假设我在 Postgres 中创建了两个表,UUID
作为 PRIMARY KEY
。这些 UUID
是使用 Postgres 中的 uuid-ossp
模块生成的:https://www.postgresql.org/docs/9.5/static/uuid-ossp.html
CREATE TABLE f(
idFoo UUID PRIMARY KEY DEFAULT gen_random_uuid(),
foo TEXT
);
CREATE TABLE b (
idBar UUID,
bar text,
FOREIGN KEY (idBar) REFERENCES foo(idFoo)
);
然后我想根据上面两个表创建一个VIEW:
CREATE OR REPLACE VIEW foobar AS (
SELECT fooid, barid
FROM foo, bar
WHERE f.idFoo = b.idBar
-- AND some other condition --
);
问题:如何比较 UUID
类型?
不要比较 UUID,您要加入它们:
CREATE OR REPLACE VIEW foobar AS (
SELECT f.foo, b.bar, f.id
FROM f JOIN b USING (id)
WHERE -- some other condition --
);
要在不同的列上加入,您可以:
CREATE OR REPLACE VIEW foobar AS (
SELECT f.foo, b.bar, idFoo, idBar
FROM f JOIN b ON (idFoo = idBar)
WHERE -- some other condition --
);
(当然,因为 idFoo = idBar,所以不需要在您的第二个 select 中包含两者)。
假设我在 Postgres 中创建了两个表,UUID
作为 PRIMARY KEY
。这些 UUID
是使用 Postgres 中的 uuid-ossp
模块生成的:https://www.postgresql.org/docs/9.5/static/uuid-ossp.html
CREATE TABLE f(
idFoo UUID PRIMARY KEY DEFAULT gen_random_uuid(),
foo TEXT
);
CREATE TABLE b (
idBar UUID,
bar text,
FOREIGN KEY (idBar) REFERENCES foo(idFoo)
);
然后我想根据上面两个表创建一个VIEW:
CREATE OR REPLACE VIEW foobar AS (
SELECT fooid, barid
FROM foo, bar
WHERE f.idFoo = b.idBar
-- AND some other condition --
);
问题:如何比较 UUID
类型?
不要比较 UUID,您要加入它们:
CREATE OR REPLACE VIEW foobar AS (
SELECT f.foo, b.bar, f.id
FROM f JOIN b USING (id)
WHERE -- some other condition --
);
要在不同的列上加入,您可以:
CREATE OR REPLACE VIEW foobar AS (
SELECT f.foo, b.bar, idFoo, idBar
FROM f JOIN b ON (idFoo = idBar)
WHERE -- some other condition --
);
(当然,因为 idFoo = idBar,所以不需要在您的第二个 select 中包含两者)。