我在 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 语法而言,您已经很接近了。您需要将每个经过 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)
);