Database 多个完全联接在PostgreSQL中不起作用
我有一个select语句,其中包含多个完整联接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
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的工作原理。是的,这行不通。你的问题是什么?