Mysql 在select查询中获取无效值

Mysql 在select查询中获取无效值,mysql,sql,join,Mysql,Sql,Join,我有两个表sales和sales\u stg。第一个是源表,第二个是暂存表 在进行审计时,找出上述各项之间的不一致之处 两个表,我得到了金额,即使暂存中不存在行 桌子 SQL FIDLE中给出了DDL、DML语句和审计查询 要查找不一致的记录,可以使用从您的查询中派生的查询 select sum(SL.sales_amt) as SALES_SUM, sum(ST.sales_WIP_amt) as SALES_STG_SUM, SL.sales_id, SL.location from sal

我有两个表
sales
sales\u stg
。第一个是源表,第二个是暂存表

在进行审计时,找出上述各项之间的不一致之处 两个表,我得到了金额,即使暂存中不存在行 桌子

SQL FIDLE中给出了DDL、DML语句和审计查询

要查找不一致的记录,可以使用从您的查询中派生的查询

select sum(SL.sales_amt) as SALES_SUM, sum(ST.sales_WIP_amt) as SALES_STG_SUM, SL.sales_id, SL.location
from sales SL INNER JOIN sales_stg ST
ON SL.sales_id = ST.sales_id
group by SL.sales_id, SL.location
having SALES_SUM != SALES_STG_SUM

如果这不是您想要的,您必须更详细地解释您想要做的事情。

如果您只想要行,只需使用带多个条件的左连接,并在第二个表中检查NULL

   select  SL.sales_id,sales_amt, SL.location
   from sales SL LEFT JOIN sales_stg ST
   ON SL.sales_id = ST.sales_id AND sales_amt=sales_wip_amt
     and SL.location=ST.location
     where sales_wip_amt IS NULL

我不明白你想要什么。什么是staging表?sales_stg?那你为什么说其中没有行?你期望的输出是什么?(毫不奇怪)你的查询返回的结果正是我期望从数据集中得到的结果provided@Mihai您可以认为一个是生产表,另一个是暂存表。我想找出两个表之间不同步的行。这里的行“插入销售值(100201,“南”);”不流向临时表。我想找出这些行。为什么值111.00出现在SALES\u STG\u SUM字段中?应该是0.00对吗?好的,我明白你的意思了。你说的是南方100人的案子。当您按普通db字段分组,并尝试对stg表的字段进行分组时,此sql会给出错误的结果。您最好使用
按ST.sales\u id、ST.location从sales\stg ST组中选择sum(ST.sales\u amt)作为sales\u sum、ST.sales\u id、ST.location这将为您提供正确的结果。感谢@Sezin Karli的实时支持,在多个字段(如位置、金额字段)中可能会出现类似不匹配的情况。我现在明白了什么时候应该使用连接、子查询或两者的组合。这很好。如果sales表中的一行的美元金额为$100,并且该信息在另一个表中被分成多行,如$50、$30和$20(sales\u id本身是相同的)。所以我在查询中使用了sum()函数。还有什么方法可以通过添加逻辑来处理空行来修复我的select查询吗???@a你可以使用SUM.GROUP BY来连接第二个表的子查询,并检查它。谢谢@Mihai:)我了解到在这种情况下使用JOIN运算符是不好的,我们可以获得出现问题的销售id和位置。我更新了sql小提琴