我在下面给出的查询工作正常但我想使用“Not In”运算符而不是“In”但它没有给出结果:
SELECT DISTINCT OrderProdDetails.Priority
FROM OrderProdDetails
WHERE (((OrderProdDetails.Priority) In (SELECT DISTINCT OrderProdDetails.Priority
FROM OrderProdDetails WHERE (((OrderProdDetails.OrdID)=[Forms]![UpdateOrder]![OdrID])))));
所需查询:
SELECT DISTINCT OrderProdDetails.Priority
FROM OrderProdDetails
WHERE (((OrderProdDetails.Priority) Not In (SELECT DISTINCT OrderProdDetails.Priority
FROM OrderProdDetails WHERE (((OrderProdDetails.OrdID)=[Forms]![UpdateOrder]![OdrID])))));
基本上它是引用父窗体上的控件并基于子窗体中的控件我要填充优先级数字,即1,2,3如果输入该记录1,我想只得到2和3作为丢弃-down选项。
ReocordID OrdID Brand Name Priority
2 1 Org 1 2
3 2 Org 2 1
4 1 Org 1 1
6 1 Org 1 3
7 3 Org 3 1
8 4 Org 1 1
9 5 Org 2 1
10 5 Org 2 2
11 6 Org 1 1
12 6 Org 2 2
如果有任何其他更好的方法,请建议。
提前感谢您的帮助。
答案 0 :(得分:2)
您的问题很可能是Priority
可以采用NULL
值。在这种情况下,NOT IN
无法按预期工作(尽管它在技术上工作)。通常的建议是始终使用NOT EXISTS
子查询而不是NOT IN
。
但是,在您的情况下,我建议使用条件聚合:
SELECT opd.Priority
FROM OrderProdDetails as opd
GROUP BY opd.Priority
HAVING SUM(IIF(opd.OrdID = [Forms]![UpdateOrder]![OdrID], 1, 0)) = 0;
HAVING
子句计算表单OdrId
在订单中的次数。 = 0
意味着它永远不存在。此外,您不再需要select distinct
。
答案 1 :(得分:0)
感谢您的快速回答,但我知道问题是什么,问题的答案是。
SELECT DISTINCT OrderProdDetails.Priority
FROM OrderProdDetails
WHERE (((OrderProdDetails.Priority) Not In (SELECT OrderProdDetails.Priority
FROM OrderProdDetails WHERE (((OrderProdDetails.OrdID)=[Forms]![UpdateOrder]![OdrID])
and ((OrderProdDetails.Priority) Is not null) ))));
我意识到问题只发生在那些优先级为空值的地方,所以我把检查设为非空,并且工作正常。
由于