Sql 我如何知道哪些行不在特定组中?

Sql 我如何知道哪些行不在特定组中?,sql,Sql,我有两种桌上产品和两种桌上产品。第一个表只包含产品id和名称,但我只需要id。第二个表包含id、产品上市期间的开始和结束日期以及每个产品的价格 表产品如下所示: SELECT id from products id DateStart DateFinish 4 2017 2019 5 2017 2019 1 2014 2016 3 2014 2016 5 2014 2016 结果如下: id 1 2

我有两种桌上产品和两种桌上产品。第一个表只包含产品id和名称,但我只需要id。第二个表包含id、产品上市期间的开始和结束日期以及每个产品的价格

表产品如下所示:

SELECT id from products
id DateStart DateFinish
4   2017        2019
5   2017        2019 
1   2014        2016
3   2014        2016
5   2014        2016
结果如下:

id 
1
2
3
4
5
以及查询:

select Id, DateStart,DateFinish sum(price) as price from products_years
group by DateStart,DateFinish, Id
order by Id, DateStart
结果:

Id DateStart DateFinish   price
1   2017        2019       100
2   2017        2019       200
3   2017        2019       40
2   2014        2016       30
4   2014        2016       140
我想知道哪些产品在上市的每个时期都停止销售

输出如下所示:

SELECT id from products
id DateStart DateFinish
4   2017        2019
5   2017        2019 
1   2014        2016
3   2014        2016
5   2014        2016

计算id和范围的所有可能组合,并排除表2中的实际组合

使用表1 id作为值 1,2,3,4,5 ,表2 id,datestart,datefinish作为值 1, 2017, 2019, 2, 2017, 2019, 3, 2017, 2019, 2, 2014, 2016, 4, 2014, 2016 选择id、datestart、datefinish 来自表1 交叉连接从表2日期中选择不同的日期开始、日期结束 除了 从表2中选择* 按日期开始描述的订单,id
注意,尽管查询是通用的,但示例使用了。

如果我理解正确,您是在试图查找表1中不在表2中的记录

如果是这样,您将希望使用。要完成所需的操作,您可以使用左连接并在右侧检查空ID,就像在右连接中一样,而不是在正确的表中一样

从“表1”中选择“Id”、“DateStart”、“DateFinish”` 左图`表2` 在'table1'。'Id`='table2`.'Id` 其中,`table2`.`Id`为空 按'DateStart'、'DateFinish'、'Id'分组` 按'Id','DateStart'排序` 该语句将返回表1中未在表2中找到的所有记录


这是一个很好的例子,它提供了一些使用join语句的有用信息。

为什么您的查询没有导致错误,告诉我们没有使用group by而没有使用聚合函数?group by,但没有涉及聚合函数-为什么?向我们展示一些table1和table2数据,以及匹配的预期结果。如果需要简化。这只是一个例子。它可以在第四列中有一个聚合函数,但它不会改变任何东西。我在表1中只有id,在表2中有id和日期。我必须检查哪些id不在表2中的每个组中。但我不知道哪些ID将出现在表1中。因此,我必须加入表2中的每个小组。我将问题置于上下文中,看看它是否更容易理解。