Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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
Database 多个完全联接在PostgreSQL中不起作用_Database_Postgresql_Full Outer Join_Multiple Join Rows - Fatal编程技术网

Database 多个完全联接在PostgreSQL中不起作用

Database 多个完全联接在PostgreSQL中不起作用,database,postgresql,full-outer-join,multiple-join-rows,Database,Postgresql,Full Outer Join,Multiple Join Rows,我有一个select语句,其中包含多个完整联接 select aroll as aroll, aname as aname, astandard as astandard, amarks as amarks, adepartment_id as adepartment_id, broll as broll, bname as bname, bstandard as bstandard, bmarks as bmarks, bdepartment_id as bdepartment_id, cro

我有一个select语句,其中包含多个完整联接

select
aroll as aroll,
aname as aname,
astandard as astandard,
amarks as amarks,
adepartment_id as adepartment_id,
broll as broll,
bname as bname,
bstandard as bstandard,
bmarks as bmarks,
bdepartment_id as bdepartment_id,
croll as croll,
cname as cname,
cstandard as cstandard,
cmarks as cmarks,
cdepartment_id as cdepartment_id
from

(
    
(   
        (
select 
            roll as aroll,
            name as aname,
            standard as astandard,
            marks as amarks,
            department_id as adepartment_id
        from student
        where department_id = 1
        and standard = 10) as firstA

        full join

        (select 
            roll as broll,
            name as bname,
            standard as bstandard,
            marks as bmarks,
            department_id as bdepartment_id
        from student
        where department_id = 2
        and standard = 10) as secondB 
        on
        firstA.astandard = secondB.bstandard
    ) first_second_combined
    full join
        (select
        roll as croll,
        name as cname,
        standard as cstandard,
        marks as cmarks,
        department_id as cdepartment_id
    from student
    where department_id = 3
    and standard = 10) thirdC
    on
    first_second_combined.astandard = thirdC.cstandard
    and
    first_second_combined.bstandard = thirdC.cstandard
    
)x;
它给我的错误如下

错误:只有合并可联接或哈希可联接联接条件才支持完全联接


你把事情弄得很复杂。您可以这样编写查询:

select
  firstA.roll as aroll,
  firstA.name as aname,
  firstA.standard as astandard,
  firstA.marks as amarks,
  firstA.department_id as adepartment_id,
  secondB.roll as broll,
  secondB.name as bname,
  secondB.standard as bstandard,
  secondB.marks as bmarks,
  secondB.department_id as bdepartment_id,
  thirdC.roll as croll,
  thirdC.name as cname,
  thirdC.standard as cstandard,
  thirdC.marks as cmarks,
  thirdC.department_id as cdepartment_id
from student firstA
full join student secondB ON firstA.standard = secondb.standard
full join student thirdC ON firstA.standard = thirdC.standard
它本质上意味着“让三胞胎学生共享一个共同的标准。”

请注意,您将为每个学生获得一个三元组
(S,S,S)
。 另外,对于每个三元组
(A,B,C)
,您还将得到`(A,C,B),(B,A,C),(B,C,A),(C,A,B),(C,B,A)。如果您的目的是只获得不同学生的三胞胎,并且避免重复,您可能需要添加:

where firstA.name < secondB.name AND secondB.name < thirdC.name
其中firstA.name
还要注意,只有在
standard
列中有空值时,这里使用完全联接才有意义。否则,您也可以使用内部联接


我希望这有助于您更好地了解SQL的工作原理。

是的,这行不通。你的问题是什么?