繁体   English   中英

使用VB.NET的SQLServerCE中的查询故障

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM