Postgresql 选择一个特定数据行(必需),以及3个其他数据行(必须包括特定数据行)
我需要选择一个特定行和另外两个不是该特定行的行(总共3行)。特定行必须始终包含在3个结果中。我该怎么做呢?我认为这一切都可以通过工会来实现,但我还有其他选择吗?谢谢大家!:) 以下是我创建示例表的脚本:Postgresql 选择一个特定数据行(必需),以及3个其他数据行(必须包括特定数据行),postgresql,Postgresql,我需要选择一个特定行和另外两个不是该特定行的行(总共3行)。特定行必须始终包含在3个结果中。我该怎么做呢?我认为这一切都可以通过工会来实现,但我还有其他选择吗?谢谢大家!:) 以下是我创建示例表的脚本: create table users ( user_id serial primary key, user_name varchar(20) not null ); create table result_table1 ( result_id serial primar
create table users (
user_id serial primary key,
user_name varchar(20) not null
);
create table result_table1 (
result_id serial primary key,
user_id int4 references users(user_id),
result_1 int4 not null
);
create table result_table2 (
result_id serial primary key,
user_id int4 references users(user_id),
result_2 int4 not null
);
insert into users (user_name) values ('Kevin'),('John'),('Batman'),('Someguy');
insert into result_table1 (user_id, result_1) values (1, 20),(2, 40),(3, 70),(4, 42);
insert into result_table2 (user_id, result_2) values (1, 4),(2, 3),(3, 7),(4, 5);
以下是我的工会查询:
SELECT result_table1.user_id,
result_1,
result_2
FROM result_table1
INNER JOIN (
SELECT user_id
FROM users
) users
ON users.user_id = result_table1.user_id
INNER JOIN (
SELECT result_table2.user_id,
result_2
FROM result_table2
) result_table2
ON result_table2.user_id = result_table1.user_id
WHERE users.user_id = 1
UNION ALL
SELECT result_table1.user_id,
result_1,
result_2
FROM result_table1
INNER JOIN (
SELECT user_id
FROM users
) users
ON users.user_id = result_table1.user_id
INNER JOIN (
SELECT result_table2.user_id,
result_2
FROM result_table2
) result_table2
ON result_table2.user_id = result_table1.user_id
WHERE users.user_id != 1
LIMIT 3;
除了工会,还有其他选择吗?该查询可以工作并执行我现在想要的操作,但是如果我有一组较大的行,它是否会始终包含user_id=1(假设user_id=1将始终存在)?:(
谢谢大家!:)你可以发布一个示例
DataFrame
,展示你想要的结果,以及你尝试过的一些事情吗?我认为union all
是你最好的选择。重要的是如果特定的行不存在,你需要多少行。这取决于你。你的问题没有足够的信息。从您的Postgres版本和表定义开始,并显示您的查询。您有无限的选择。如果您发布SQL,我们可以告诉您它们是什么。或者至少解释一下您的查询试图做什么。