我正在寻找一个查询来返回销售表中的一个名为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
先谢谢你。
答案 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
)