需要查询根据另一个

时间:2017-12-25 16:16:54

标签: mysql sql sql-server join

我正在寻找一个查询来返回销售表中的一个名为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

先谢谢你。

3 个答案:

答案 0 :(得分:0)

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

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

这将返回销售表中所有行的MRP字段,其中包含" Iid"没有匹配的值" Iid" PurchaseTable中的值。根据您的数据库版本,您可能需要将WHERE Iid IS NOT NULL添加到子选项以使用NOT IN。

您还应该能够使用NOT EXISTS运算符执行相同的操作。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

使用some()

not exists()

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

返回:

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