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
Postgresql:如何合并2个查询_Sql_Postgresql - Fatal编程技术网

Postgresql:如何合并2个查询

Postgresql:如何合并2个查询,sql,postgresql,Sql,Postgresql,我有一个案例,需要组合两个查询以获得预期的重新结果: 我有两张桌子: 学生 +------+-------+------------------------------------+ | id | name | ... | +------+-------+------------------------------------+ | 1 | Tom | ...

我有一个案例,需要组合两个查询以获得预期的重新结果:

我有两张桌子:

学生

+------+-------+------------------------------------+
| id   | name  | ...                                |
+------+-------+------------------------------------+
| 1    | Tom   | ...                                |
| 2    | Mary  | ...                                |
| 3    | Peter | ...                                |
| 4    | Laura | ...                                |
+------+-------+------------------------------------+
颜色

我有两个问题

//Select all student
select name from student

//Select a random color
select color from color
order by random()
limit 1 
如何合并两个查询的结果以获得最终结果

 +------+-------+-------+
 | id   | name  | team  |
 +------+-------+-------+
 | 1    | Tom   | red   |
 | 2    | Mary  | red   |
 | 3    | Peter | blue  |
 | 4    | Laura | red   |
 +------+-------+-------+
列“team”中的值是表“color”中的随机值


感谢您的建议。

使用两个表的交叉连接,并在上使用适当的顺序进行区分:

Select S.ID,S.Name,C.color as Team
from student s inner join color c on s.ID=c.ID
select distinct on(s.id, name) s.id, name, color
from student s
cross join color
order by 1, 2, random()

注意

order by 1, 2, random()
表示按第一、第二列排序,然后按random()排序,相当于

order by s.id, name, random()

SELECT DISTINCT ON(表达式[,…])仅保留给定表达式计算结果相等的每组行的第一行。DISTINCT ON表达式使用与ORDER BY相同的规则进行解释(见上文)。请注意,每个集合的“第一行”是不可预测的,除非使用ORDER BY来确保所需的行首先出现。(…)DISTINCT ON表达式必须与最左边的ORDER BY表达式匹配。ORDER BY子句通常包含其他表达式,这些表达式确定每个DISTINCT ON组中所需的行优先级


使用两个表的交叉连接,并在上使用适当的order by:

select distinct on(s.id, name) s.id, name, color
from student s
cross join color
order by 1, 2, random()

注意

order by 1, 2, random()
表示按第一、第二列排序,然后按random()排序,相当于

order by s.id, name, random()

SELECT DISTINCT ON(表达式[,…])仅保留给定表达式计算结果相等的每组行的第一行。DISTINCT ON表达式使用与ORDER BY相同的规则进行解释(见上文)。请注意,每个集合的“第一行”是不可预测的,除非使用ORDER BY来确保所需的行首先出现。(…)DISTINCT ON表达式必须与最左边的ORDER BY表达式匹配。ORDER BY子句通常包含其他表达式,这些表达式确定每个DISTINCT ON组中所需的行优先级


不,它将只返回学生1和2,而不是所有学生不,它将只返回学生1和2,而不是所有学生我工作得很好,你能给我解释更多关于1,2,random()的顺序吗?你救了我一天。它工作得很好,你能给我解释更多关于1,2,random()的顺序吗?你救了我一天。