【问题标题】:SQL Join Table for Single Table to Self单表到自身的 SQL 连接表
【发布时间】:2018-07-15 08:45:20
【问题描述】:

我正在尝试在 Postgres 中创建一个表来表示同一个表的行之间的多对多关系。

我有一个名为 outerwear 的表(类似于夹克等),我想在 outerwear 的实例之间创建多对多关系。

我想知道最好的方法是创建一个连接表来模拟这种关系,考虑到 ABB 相同的事实em>B 到 A。到目前为止,我有这个(这只是一个普通的连接表):

CREATE TABLE outerwear_outerwear_join (
    a_outerwear_id integer REFERENCES outerwear,
    b_outerwear_id integer REFERENCES outerwear,
    PRIMARY KEY(a_outerwear_id, b_outerwear_id)
);

但这同样不能说明翻转列的顺序不应改变行的值/唯一性这一事实。

【问题讨论】:

    标签: sql postgresql many-to-many


    【解决方案1】:

    使用leastgreatest 函数创建一个UNIQUE INDEX

    CREATE UNIQUE INDEX unq_test_a_b 
      ON outerwear_outerwear_join ( LEAST(a_outerwear_id, b_outerwear_id), GREATEST( 
    a_outerwear_id, b_outerwear_id)); 
    

    Demo

    【讨论】:

    • 好的,很好!我将如何在上面的 CREATE TABLE 语句中定义它? (我还没执行)
    • @HenryWoody : 在create table之后单独运行的语句
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2015-01-05
    相关资源
    最近更新 更多