我有一个案例,我需要结合2个查询来获得预期的结果:
我有两张桌子:
学生
+------+-------+------------------------------------+
| id | name | ... |
+------+-------+------------------------------------+
| 1 | Tom | ... |
| 2 | Mary | ... |
| 3 | Peter | ... |
| 4 | Laura | ... |
+------+-------+------------------------------------+
颜色
+------+-------+
| id | color |
+------+-------+
| 1 | red |
| 2 | blue |
+------+-------+
我有2个查询
//Select all student
select name from student
//Select a random color
select color from color
order by random()
limit 1
如何合并2个查询的结果以获得最终结果。
+------+-------+-------+
| id | name | team |
+------+-------+-------+
| 1 | Tom | red |
| 2 | Mary | red |
| 3 | Peter | blue |
| 4 | Laura | red |
+------+-------+-------+
“team”列中的值是表'color'中的随机值。
任何建议都表示赞赏。
答案 0 :(得分:0)
Select S.ID,S.Name,C.color as Team
from student s inner join color c on s.ID=c.ID
答案 1 :(得分:0)
使用两个表的交叉联接和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(expression [,...])仅保留给定表达式求值的每组行的第一行。使用与ORDER BY相同的规则解释DISTINCT ON表达式(参见上文)。请注意,每个集合的“第一行”是不可预测的,除非使用ORDER BY来确保首先出现所需的行。 (...)DISTINCT ON表达式必须与最左边的ORDER BY表达式匹配。 ORDER BY子句通常包含其他表达式,用于确定每个DISTINCT ON组中行的所需优先级。