Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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
根据它对一个表的结果进行排序';s在另一个表psql中的可用性_Sql_Postgresql_Psql - Fatal编程技术网

根据它对一个表的结果进行排序';s在另一个表psql中的可用性

根据它对一个表的结果进行排序';s在另一个表psql中的可用性,sql,postgresql,psql,Sql,Postgresql,Psql,我有5张表A、A1、A2、A3、A4。 A与其余4个表具有外键关系 我想先检查A1的供货情况,然后再检查A2的供货情况,以此类推 所以结果应该按A1、A2、A3、A4中的可用性顺序显示 select * from A as main order by (select abc from A1 where main.abc = A1.abc), (select abc from A2 where main.abc = A2.abc), (select abc from A3 where main.a

我有5张表A、A1、A2、A3、A4。 A与其余4个表具有外键关系

我想先检查A1的供货情况,然后再检查A2的供货情况,以此类推

所以结果应该按A1、A2、A3、A4中的可用性顺序显示

select * from A as main
order by (select abc from A1 where main.abc = A1.abc), (select abc from A2 where main.abc = A2.abc), (select abc from A3 where main.abc = A3.abc), (select abc from A4 where main.abc = A4.abc)
如果一个表中有10条记录,那么我希望所有10条记录都在结果中,但这些记录应该按照A1、A2、A3和A4中的可用性排序
不会有什么帮助。

使用
左连接和
合并

select distinct A.* 
from A
LEFT JOIN A1 ON A.abc = A1.abc
LEFT JOIN A2 ON A.abc = A2.abc
LEFT JOIN A3 ON A.abc = A3.abc
LEFT JOIN A4 ON A.abc = A4.abc
ORDER BY COALESCE(A1.abc,A2.abc,A3.abc,A4.abc)
SELECT A.* 
FROM A LEFT JOIN A1 ON A.ID = A1.ID
LEFT JOIN A2 ON A.ID = A2.ID 
LEFT JOIN A3 ON A.ID = A3.ID 
LEFT JOIN A4 ON A.ID = A4.ID 
ORDER BY COALESCE(A1.ID ,A2.ID ,A3.ID ,A4.ID )
然而,这没有多大意义。订购将根据
abc
值进行。如果您打算根据A1-A4中的某个值进行订购,请使用它而不是
COALESCE
中的
abc

如果希望行首先位于A1中,则可以使用
|
根据A1-A4的存在性强制执行排序(如果
abc
属性为
varchar


使用
左连接
合并

select distinct A.* 
from A
LEFT JOIN A1 ON A.abc = A1.abc
LEFT JOIN A2 ON A.abc = A2.abc
LEFT JOIN A3 ON A.abc = A3.abc
LEFT JOIN A4 ON A.abc = A4.abc
ORDER BY COALESCE(A1.abc,A2.abc,A3.abc,A4.abc)
SELECT A.* 
FROM A LEFT JOIN A1 ON A.ID = A1.ID
LEFT JOIN A2 ON A.ID = A2.ID 
LEFT JOIN A3 ON A.ID = A3.ID 
LEFT JOIN A4 ON A.ID = A4.ID 
ORDER BY COALESCE(A1.ID ,A2.ID ,A3.ID ,A4.ID )
然而,这没有多大意义。订购将根据
abc
值进行。如果您打算根据A1-A4中的某个值进行订购,请使用它而不是
COALESCE
中的
abc

如果希望行首先位于A1中,则可以使用
|
根据A1-A4的存在性强制执行排序(如果
abc
属性为
varchar


使用
合并

select distinct A.* 
from A
LEFT JOIN A1 ON A.abc = A1.abc
LEFT JOIN A2 ON A.abc = A2.abc
LEFT JOIN A3 ON A.abc = A3.abc
LEFT JOIN A4 ON A.abc = A4.abc
ORDER BY COALESCE(A1.abc,A2.abc,A3.abc,A4.abc)
SELECT A.* 
FROM A LEFT JOIN A1 ON A.ID = A1.ID
LEFT JOIN A2 ON A.ID = A2.ID 
LEFT JOIN A3 ON A.ID = A3.ID 
LEFT JOIN A4 ON A.ID = A4.ID 
ORDER BY COALESCE(A1.ID ,A2.ID ,A3.ID ,A4.ID )

使用
合并

select distinct A.* 
from A
LEFT JOIN A1 ON A.abc = A1.abc
LEFT JOIN A2 ON A.abc = A2.abc
LEFT JOIN A3 ON A.abc = A3.abc
LEFT JOIN A4 ON A.abc = A4.abc
ORDER BY COALESCE(A1.abc,A2.abc,A3.abc,A4.abc)
SELECT A.* 
FROM A LEFT JOIN A1 ON A.ID = A1.ID
LEFT JOIN A2 ON A.ID = A2.ID 
LEFT JOIN A3 ON A.ID = A3.ID 
LEFT JOIN A4 ON A.ID = A4.ID 
ORDER BY COALESCE(A1.ID ,A2.ID ,A3.ID ,A4.ID )

您可以根据存在进行排序:



结果:



您可以根据存在进行排序:



结果:



请发布一个示例输出。请发布一个示例输出。我不想要左连接结果。我只想要表A的字段,这也是不同的结果。@Gaurav嘿,在这种情况下,样本输入的预期输出会很好。换句话说,如果你想要符合你需要的答案,那么你应该正确地问。Baca,如果一个表中有10条记录,那么我想要所有10条记录的结果,但这些记录应该按照A1、A2、A3和A4中的可用性排序。@RadimBačA why
coalesce
?是不是应该按a1.abc、a2.abc、a3.abc、a4.abc的顺序进行排序?我可能没有得到问题,我不想留下连接结果。我只想要表A的字段,这也是不同的结果。@Gaurav嘿,在这种情况下,样本输入的预期输出会很好。换句话说,如果你想要符合你需要的答案,那么你应该正确地问。Baca,如果一个表中有10条记录,那么我想要所有10条记录的结果,但这些记录应该按照A1、A2、A3和A4中的可用性排序。@RadimBačA why
coalesce
?是不是应该是a1.abc,a2.abc,a3.abc,a4.abc的订单