从H2中的每个子表获取元组

问题描述 投票:0回答:1

我在 h2 数据库中有一个表(PERSON):

id primary
name
age
address
company

以及其他三个以

id
作为外键的表(COMP1、COMP2、COMP3):

id foreign references PERSON(id)
department

假设我想从 PERSON 表中获取总共 18 个姓名,条件是从 COMPx 表中随机选择每个人应该有 6 个人。我的尝试:

SELECT name AS "Candidate's name" 
FROM PERSON 
WHERE id IN (
  SELECT id FROM COMP1 WHERE department='sales' 
  ORDER BY RANDOM() LIMIT 6 
  UNION
  SELECT id FROM COMP2 WHERE department='production' 
  ORDER BY RANDOM LIMIT 6 
  UNION
  SELECT id FROM COMP3 WHERE department='supply'
  ORDER BY RANDOM() LIMIT 6
);

抛出此错误:

org.h2.jdbc.JdbcSQLDataException:标量子查询包含多于一行。

有什么办法可以做到这一点吗?

sql database h2
1个回答
0
投票

就 SQL 语法而言,您已经很接近了。您需要将每个经过 UNION 处理的子查询括在括号中。例如:

SELECT name AS "Candidate's name" 
FROM PERSON 
WHERE id IN (
  (SELECT id FROM COMP1 WHERE department='sales' 
  ORDER BY RANDOM() LIMIT 6)
  UNION
  (SELECT id FROM COMP2 WHERE department='production' 
  ORDER BY RANDOM LIMIT 6 )
  UNION
  (SELECT id FROM COMP3 WHERE department='supply'
  ORDER BY RANDOM() LIMIT 6)
);
© www.soinside.com 2019 - 2024. All rights reserved.