需要一个查询来根据另一个表的值从一个表中排序值

问题描述 投票:0回答:3

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

此处的第二行样本销售表具有错误的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
3个回答
0
投票

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

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

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

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


0
投票

使用not exists()

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

即使:z zxswい

收益:

http://rextester.com/ZICIT13088

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

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

© www.soinside.com 2019 - 2024. All rights reserved.