Sql 我如何知道哪些行不在特定组中?
我有两种桌上产品和两种桌上产品。第一个表只包含产品id和名称,但我只需要id。第二个表包含id、产品上市期间的开始和结束日期以及每个产品的价格 表产品如下所示: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
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中的每个小组。我将问题置于上下文中,看看它是否更容易理解。