【问题标题】:Need a Query to sort out the Values from One table based on values of another需要一个查询来根据另一个表的值对一个表中的值进行排序
【发布时间】:2025-11-21 17:15:01
【问题描述】:

我正在寻找一个查询来返回销售表中称为MRP 的列。该表有一些错误的 MRP 值。在Purchase 表中,一切都井井有条,并且具有正确的 MRP 值。需要一个查询来返回销售表中的值,该表在单个项目的采购表中没有匹配的 MRP。

样品采购表

  Iid  CP        QUANTITY   MRP PRICE
  1   62.8  240  89 78
  1   57.5  240  89 79
  1  60.15  480  89 79
  2  60.14  720  89 79
  2  60.15  480  89 79

此处的示例销售表第 2 行有错误的 MRP

  iid  CP   QTY MRP PRICE
  1   57.5  240 89  77
  1   57.5  40  81  79
  1   57.5  40  89  79
  1   62.8  40  89  72
  1   62.8  40  89  78

需要一个查询来显示销售表中的 ID,其中 ItemID iid 和 MRP 在不在同一项目的采购列表中时被错误地采用

提前致谢。

【问题讨论】:

    标签: mysql sql sql-server join


    【解决方案1】:

    使用not exists()

    select *
    from sale s
    where not exists (
      select 1
      from purchase p
      where p.iid = s.iid
        and p.mrp = s.mrp
      )
    

    rextester 演示:http://rextester.com/ZICIT13088

    返回:

    +-----+----+-----+-----+-------+
    | iid | cp | qty | mrp | price |
    +-----+----+-----+-----+-------+
    |   1 | 58 |  40 |  81 |    79 |
    +-----+----+-----+-----+-------+
    

    【讨论】:

      【解决方案2】:

      您可以使用 NOT IN 子句来测试不存在的值。在您的情况下,只需从购买表中获取“NOT IN”值:

      SELECT MRP
      FROM SalesTable
      WHERE Iid NOT IN (SELECT IId FROM PurchaseTable)
      

      这将为您的销售表中的所有行返回 MRP 字段,这些行的“Iid”值在 PurchaseTable 中没有匹配的“Iid”值。根据您的数据库版本,您可能需要将 WHERE Iid IS NOT NULL 添加到您的子选择中才能使用 NOT IN。

      您还应该能够使用NOT EXISTS 运算符来做同样的事情。

      【讨论】:

      • 它什么也没返回,对不起
      • 请发布您运行的确切查询。
      【解决方案3】:
      SELECT id, itemn, CAST(MRP AS NUMERIC(18,0)) as mrp, price
      FROM [iBillDB].[dbo].DETAILSALE
      WHERE  CAST(MRP AS NUMERIC(18,0)) NOT IN (SELECT CAST(MRP AS NUMERIC(18,0)) FROM [iBillDB].[dbo].DETAILPURCHASES) order by id, CAST(itemn AS NUMERIC(18,0)) asc
      

      这对我有用。感谢@ravioli 的提示

      【讨论】:

        最近更新 更多