[英]Query malfunction in SQLServerCE using with VB.NET
我正在做一个项目,我的目标是使学校的收费系统自动化。 我正在VB.NET 2012中实施该项目,并使用SQLServerCE处理数据。
我的情况是这样的:
我有两个表:“ feecollection”和“ StudentDetails”
表费用收集的列如下
同样,表StudentDetails的列如下
现在,我想找出默认学生的姓名。 我正在根据名称,月份和默认值字段进行过滤。
逻辑:给定月份收取费用的学生的姓名已经付款,因此默认值是“学生详细信息”中的所有姓名,但默认情况下字段为“ 1”的费用收集中没有姓名(1表示他们已付款)。
我的查询:
select StudentDetails.Name where StudentDetails.Name not in
(Select feecollection.Name, feecollection.Month, feecollection.defaulter,
StudentDetails.Name from feecollection
inner join StudentDetails on feecollection.Name = StudentDetails.Name
where StudentDetails.Name = 'def' and feecollection.month = 'January'
and feecollection.defaulter = '1'
但是此查询无法正常工作。 我在哪里出错了?
假设默认字段为'0'或当学生未付款时缺少收费记录,我将使用类似以下的SQL语句。
SELECT StudentDetails.Name FROM StudentDetails
LEFT JOIN feecollection ON StudentDetails.Name = feecollection.Name
AND feecollection.Payment_For_Month = 'Jan'
WHERE feecollection.defaulter = '0' OR feecollection.defaulter IS NULL;
这样,您应该在StudentDetails中获得所有记录,其中匹配的费用收集记录的默认记录为'0'或不存在。
编辑
如果您仍然想使用IN运算符,则此语句应执行以下操作:
SELECT StudentDetails.Name FROM StudentDetails WHERE
StudentDetails.Name NOT IN
(SELECT feecollection.Name FROM feecollection
WHERE feecollection.Payment_For_Month = 'Feb'
AND feecollection.defaulter = '1')
我已经在简化的数据集上对此进行了测试:
学生详细信息:
Name Class Section
------------------------
Adam 101 Sect1
Bob 101 Sect
Charlie 101 Sect2
收费:
Name Payment_For_Month defaulter
--------------------------------------
Adam Jan 1
Adam Feb 1
Bob Jan 1
使用此数据,最上面的语句仅返回Charlie,而第二个语句返回Bob和Charlie。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.