Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql R03(C,D) , (31, 3, 3) , (32, 3, 4) --R04(B,F) , (41, 4, 2) , (42, 4, 6) --R05(A,F) , (51, 5, 1) , (52, 5, 6) --R06(D,G) , (61, 6_Sql_Postgresql - Fatal编程技术网

Sql R03(C,D) , (31, 3, 3) , (32, 3, 4) --R04(B,F) , (41, 4, 2) , (42, 4, 6) --R05(A,F) , (51, 5, 1) , (52, 5, 6) --R06(D,G) , (61, 6

Sql R03(C,D) , (31, 3, 3) , (32, 3, 4) --R04(B,F) , (41, 4, 2) , (42, 4, 6) --R05(A,F) , (51, 5, 1) , (52, 5, 6) --R06(D,G) , (61, 6,sql,postgresql,Sql,Postgresql,R03(C,D) , (31, 3, 3) , (32, 3, 4) --R04(B,F) , (41, 4, 2) , (42, 4, 6) --R05(A,F) , (51, 5, 1) , (52, 5, 6) --R06(D,G) , (61, 6, 4) , (62, 6, 7) --R07(A,G) , (71, 7, 1) , (72, 7, 7) --R08(E) , (81, 8, 5) ; 结果 lbl_1 | lbl_2 | lbl_3 -------+-------+-

R03(C,D) , (31, 3, 3) , (32, 3, 4) --R04(B,F) , (41, 4, 2) , (42, 4, 6) --R05(A,F) , (51, 5, 1) , (52, 5, 6) --R06(D,G) , (61, 6, 4) , (62, 6, 7) --R07(A,G) , (71, 7, 1) , (72, 7, 7) --R08(E) , (81, 8, 5) ; 结果
lbl_1 | lbl_2 | lbl_3
-------+-------+-------
A | B | F
A | D | G
B | H | F
C | G | D
F | G | A
G | H | A
(6排)

是否允许使用公共表表达式?有了这些,你可以模拟视图。不,你不能使用它们。那么SQL函数呢?甚至不是那些。不幸的是,有很多限制只是为了解决困难。操作没有CTE,没有看到这一点。谢谢,我不知道为什么我以前没有想到这一点。虽然速度非常慢,在我的数据库上运行大约需要4分钟,但这并不重要。我的意思是,这个练习是关于不使用CTE的,但我只是尝试添加了一个CTE,运行时间从4分钟增加到90毫秒。很高兴听到这些,也很乐意提供帮助。是的,CTE会阻止多次重新运行相同的结果集,我们在这里使用不同的
WHERE
条件重复这些结果集。
label {id(PK), name}

release {id(PK), name}

-- associates a label to all its releases
release_label {id(PK), release(FK), label(FK)}
SELECT DISTINCT label_1.name, label_2.name
FROM label label_1 JOIN label label_2 ON label_1.name < label_2.name
WHERE NOT EXISTS 
     (SELECT * 
      FROM release release_A 
      JOIN release_label RLA ON release_A.id = RLA.release
      JOIN label label_A ON RLA.label = label_A.id
      JOIN release release_B ON release_A.name = release_B.name
      JOIN release_label RLB ON release_B.id = RLB.release
      JOIN label label_B ON RLB.label = label_B.id
      WHERE label_1.name = label_A.name AND label_2.name = label_B.name
     )
SELECT DISTINCT label_1.name, label_2.name, label_3.name
FROM label label_1
JOIN label label_2 ON label_1.name < label_2.name
JOIN label label_3 ON label_3.name <> label_1.name
                   AND label_3.name <> label_2.name
WHERE NOT EXISTS 
     (SELECT 1
      FROM release release_A 
      JOIN release_label RLA ON release_A.id = RLA.release
      JOIN label label_A ON RLA.label = label_A.id
      JOIN release release_B ON release_A.name = release_B.name
      JOIN release_label RLB ON release_B.id = RLB.release
      JOIN label label_B ON RLB.label = label_B.id
      WHERE label_1.name = label_A.name
        AND label_2.name = label_B.name
     )
 AND EXISTS
     (SELECT 1
      FROM release release_A 
      JOIN release_label RLA ON release_A.id = RLA.release
      JOIN label label_A ON RLA.label = label_A.id
      JOIN release release_B ON release_A.name = release_B.name
      JOIN release_label RLB ON release_B.id = RLB.release
      JOIN label label_B ON RLB.label = label_B.id
      WHERE label_1.name = label_A.name 
        AND label_3.name = label_B.name
     )
 AND EXISTS
     (SELECT 1
      FROM release release_A 
      JOIN release_label RLA ON release_A.id = RLA.release
      JOIN label label_A ON RLA.label = label_A.id
      JOIN release release_B ON release_A.name = release_B.name
      JOIN release_label RLB ON release_B.id = RLB.release
      JOIN label label_B ON RLB.label = label_B.id
      WHERE label_2.name = label_A.name 
        AND label_3.name = label_B.name
     )