【问题标题】:Select query to return no records选择查询不返回任何记录
【发布时间】:2021-05-14 13:42:43
【问题描述】:

我有表 1:EMP 如下

   ID   NAME             CITY             AMT        
   -------------------------------------------
    1   sajani           Bangalore        20          
    2   Prashanth        Bangalore        10          
    3   Jayvin           Bangalore        10    

表 2:EMP1

ID   NAME1            CITY1            AMT1    
 ---------------------------------------------
  1   Sajani           Bangalore        10      
  1   Sajani           Bangalore        10      
  2   Prashanth        Bangalore        10      
  3   Jayvin           Bangalore        10 
    

ID 是 Key 并且在两个文件中都是通用的。我想要一个 Select SQL 语句,它声明 table 1 = table 2,一旦执行 select 查询,它应该返回 0 条记录。

【问题讨论】:

  • 您能分享一下您编写 SQL 查询的尝试吗?你写了什么,你具体面临什么问题?另外请为两个表添加更多上下文,为什么要在多个表中复制相同的信息?
  • 样本数据很好,但您也应该指定预期的结果。
  • 如果table2 的员工不在table1 中怎么办?
  • table1=table2 是什么意思?具有相同值的完全相同的行?当有重复行时会发生什么(例如表 2)?当一个表中的行在另一个表中不存在时会发生什么?

标签: sql db2


【解决方案1】:

使用减号运算符

SELECT ID, NAME, CITY, AMT
FROM EMP

MINUS

SELECT ID, NAME1, CITY1, SUM(AMT1)
FROM EMP1
GROUP BY ID, NAME1, CITY1

【讨论】:

  • 没有。对于集合 A - B 可以等于零(空集合),当 B 中存在 A 中不存在的元素时。您需要 A - B union B - A = empty set
  • @astentx 这是您对 OP 问题和数据的解释,而不是我的。看到她自己的答案,果然是她要找的。因此我的回答是正确的
  • 如果您认为 OP 有足够的经验和测试用例来涵盖所有情况,这当然是比使用子查询更好的方法。但只要 SO 的目的不是一次性问题,而是对未来有价值的东西,上述查询并没有告诉表 A 等于(聚合)表 B(忽略 key 应该是唯一的事实)跨度>
  • 这也是我对这个问题的解释。
  • @astentx 你没有错。但在这里几年后,我学会了: 1. 阅读新人问题的字里行间,发现他们很难正确表达他们的问题。 2. 了解什么是一次性问题(和答案)以及什么可以为社区服务。这里很有可能它更像是一次性的问答。现在看看发生了什么:她永远离开了,没有感谢、评论、+1(txsGordon!)或接受的答案。她的解决方案在性能方面是蹩脚的,而我的要好得多,但她不在乎。不值得花时间回答更多问题;)
【解决方案2】:

谢谢,我找到了解决办法

Select * from emp                                               
where amt <>(
              select sum(e1.amt1) 
              from emp1 e1 
              where e1.id =emp.id
             )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多