当前位置: 首页 > 面试题库 >

选择一个以上项目的所有订单,并检查所有项目的状态

钱远
2023-03-14
问题内容

我有2张表:

命令:

Id   |  Status
-----+--------
 1   |      OK
 2   | WAITING
 3   | WAITING
 4   |      OK
 5   |      OK
 6   |      OK

和Order_details:

Id   |  Order_Id  |  Status
-----+------------+--------
 1   |         1  |      S1
 2   |         1  |      S1
 3   |         2  |      S1
 4   |         4  |      S2
 5   |         4  |      S2
 6   |         4  |      S3
 7   |         5  |      S1
 8   |         5  |      S1

我需要做的是选择所有具有多个Order_detail的订单,并且订单状态必须为“ OK”,并且每个order_detail的状态都 必须
为(S1,S2)

我做了这样的事情:

SELECT O.Id FROM Orders O 
            JOIN Order_details OD 
                ON O.Id=OD.Order_Id
WHERE O.Status='OK' AND OD.Status IN ('S1','S2')
GROUP BY O.Id
HAVING count(DISTINCT OD.Id)>1

但这将返回所有具有多个Order_details满足条件的订单。

我确定这部分很好:

SELECT O.Id FROM Orders O 
            JOIN Order_details OD 
                ON O.Id=OD.Order_Id
WHERE O.Status='OK'
GROUP BY O.Id
HAVING count(DISTINCT OD.Id)>1

但是我必须检查以上订单的每个Order_detail是否都具有状态IN(S1,S2)。

因此,如果“订单”有2个详细信息,其中一个状态为“ S1”,第二个“ S3”,则应跳过此订单。


问题答案:

SELECT O.Id
FROM Orders O
JOIN Order_details OD ON O.Id=OD.Order_Id
WHERE O.Status=’OK’
GROUP BY O.Id
HAVING count(DISTINCT OD.Id)>1
AND SUM(CASE WHEN OD.Status NOT IN (‘S1’,’S2’)
THEN 1
ELSE 0
END) = 0



 类似资料:
  • 问题内容: 我需要从表中的鸟(基本上是所有鸟)中选择所有值,然后与另一个跟踪谁喜欢那只鸟的表联接。 因此,我希望查询返回所有鸟类,以及人们喜欢该鸟类的记录的ID。如果没有任何人喜欢这只鸟的记录,那么该字段应该为空。 我当前的查询没有得到空值。这里是: 如何确保Birds表中的每一行都显示一次? 问题答案: 您必须使用而不是 不同的联接 :仅保留两个表中都有数据的行 :保留左侧表格的所有行,并添加右

  • 我正在尝试使用查询检索dynamodb表中的所有项。下面是我的代码: 但是,我收到以下错误: 我的代码非常简单,出自boto dynamodb2文档,因此我不确定为什么会出现上述错误。任何见解都将受到赞赏(这是新的,有点迷失)。谢谢 编辑:我有一个散列键和一个范围键。我能够通过特定的哈希键进行查询。例如 但我如何检索所有项目?

  • 因此,我今天的梁工作以以下警告结束: /usr/local/lib/python2。7/dist包/apache_-beam/runners/dataflow/dataflow_-runner。py:800:BeamDeprecationWarning:自第一个稳定版本以来,选项已被弃用。提及。选项将不受支持 所以据我所知,与其这样做: 我将不得不谈到这一点: 但有一个问题,很多选项不再可用,例如

  • 在发电机表中,我希望通过选择属性值与一组值匹配的所有项来查询。例如,我的表具有current_status属性,因此我希望所有具有“新”或“ASSIGNED”值的项。如果我对current_status属性应用GSI,看起来我必须在两个查询中执行此操作?或者进行扫描?

  • 我试着运行一段代码,在pandas数据帧中遍历一列,如下所示: 每当我检测到一个值小于0的项目时,我都想加上1,000,000,并将结果放回dataframe中。 我试着这样做: 但是我得到了一个关键错误。 如何访问for循环的当前位置?

  • 我有一个< code>GridView,其中有一堆使用自定义适配器填充的项目。在java中,网格视图被设置为< code > CHOICE _ MODE _ MULTIPLE _ MODAL ,我可以使用上下文操作栏来选择内容(所有这些都很好)。 我希望网格项在按下时高亮显示,在选择时有不同的高亮显示(正是您在ICS的Gallery应用程序中看到的行为)。 我有一个在网格视图XML中指定的选择器,