我试图弄清楚如何从两个表中选择数据,其中我使用count>1选择数据,而且仅在特定的一年中。我当前的查询如下:
SELECT table1.ID, table1.name, table1.data
FROM table1
WHERE table1.ID IN (
SELECT table2.ID
FROM table2
WHERE table2.year = '2020' AND table2.ID IN (
SELECT table2.ID
FROM table2
GROUP BY table2.ID
HAVING COUNT(*) > 1
)
);但是,如果跨多年使用count=1检索给定年份的数据,则使用count>1检索数据。如何编写查询以排除这些查询?
编辑背景:在我想要输出的table1中,我们有与键ID相关的名称和数据,这个表不经常更改,在table2中,我存储的信息每年更新一次。我只想为那些发生在2020年不止一次,但在多年内不超过一次发生的事件选择id、名称和数据。
发布于 2022-04-08 01:00:49
您可以将其表示为一个联接:
SELECT t1.ID, t1.name, t1.data
FROM table1 t1
INNER JOIN
(
SELECT ID
FROM table2
GROUP BY ID
HAVING COUNT(CASE WHEN year = 2020 THEN 1 END) > 0 AND COUNT(*) > 1
) t2
ON t2.ID = t1.ID;发布于 2022-04-08 01:34:22
您应该在IN子句中检查这两个条件:
Select table1.ID, table1.name, table1.data
From table1
WHERE table1.ID IN (
SELECT table2.ID
FROM table2
WHERE table2.ID IN (
SELECT table2.ID
FROM table2
GROUP BY table2.ID
HAVING COUNT(*) > 1 and
table2.year = '2020')
);https://stackoverflow.com/questions/71790491
复制相似问题