1

我在 SQL 中使用了以下代码

SELECT 
        Stu_info.Id_num, 
        Stu_info.Stu_name, 
        Development_fee.Dvf, 
        Tuition_fee.Acy, 
        Tuition_fee.Tui_fee, 
        Registration_fee.Reg_fee, 
        Form_fill_up_fee.Acy, 
        Form_fill_up_fee.FFF, 
        Examination_fee.E_typ, 
        Examination_fee.Exm_fee, 
        monthly_instal.Instm, 
        monthly_instal.Paid     

FROM 
        [SUIMT].[dbo].[Stu_info], 
        [SUIMT].[dbo].[Development_fee], 
        [SUIMT].[dbo].[Tuition_fee], 
        [SUIMT].[dbo].[Registration_fee], 
        [SUIMT].[dbo].[Form_fill_up_fee], 
        [SUIMT].[dbo].[Examination_fee], 
        [SUIMT].[dbo].[monthly_instal]
WHERE 
        Development_fee.Id_num, 
        Tuition_fee.Id_num, 
        Registration_fee.Id_num, 
        Form_fill_up_fee.Id_num, 
        Examination_fee.Id_num, 
        monthly_instal.Id_num   = Stu_info.Id_num

但它显示错误说

"Msg 4145, Level 15, State 1, Line 3
An expression of non-boolean type specified in a context where a
condition is expected, near ','".

你能帮我解决这个问题吗?我将不胜感激提供一个例子,这样我就可以更容易地理解它。

4

4 回答 4

1

WHERE条款的目的是什么?你是这个意思吗?

WHERE
      Stu_info.Id_num = Development_fee.Id_num
  AND Stu_info.Id_num = Tuition_fee.Id_num
  AND Stu_info.Id_num = Registration_fee.Id_num
  AND Stu_info.Id_num = Form_fill_up_fee.Id_num
  AND Stu_info.Id_num = Examination_fee.Id_num
  AND Stu_info.Id_num = monthly_instal.Id_num

此外,usingFROM tableA, TableB, TableC是一种非常古老的表示法。 ANSI-92标准用途JOIN...

SELECT
  Stu_info.Id_num, Stu_info.Stu_name, Development_fee.Dvf, Tuition_fee.Acy, Tuition_fee.Tui_fee, Registration_fee.Reg_fee, Form_fill_up_fee.Acy, Form_fill_up_fee.FFF, Examination_fee.E_typ, Examination_fee.Exm_fee, monthly_instal.Instm, monthly_instal.Paid     
FROM
  [SUIMT].[dbo].[Stu_info]
INNER JOIN
  [SUIMT].[dbo].[Development_fee]
    ON Stu_info.Id_num = Development_fee.Id_num
INNER JOIN
  [SUIMT].[dbo].[Tuition_fee]
    ON Stu_info.Id_num = Tuition_fee.Id_num
INNER JOIN
  [SUIMT].[dbo].[Registration_fee]
    ON Stu_info.Id_num = Registration_fee.Id_num
INNER JOIN
  [SUIMT].[dbo].[Form_fill_up_fee]
    ON Stu_info.Id_num = Form_fill_up_fee.Id_num
INNER JOIN
  [SUIMT].[dbo].[Examination_fee]
    ON Stu_info.Id_num = Examination_fee.Id_num
INNER JOIN
  [SUIMT].[dbo].[monthly_instal]
    ON Stu_info.Id_num = monthly_instal.Id_num
于 2012-08-04T10:45:08.873 回答
1

您应该使用正确的 ANSI SQL-92 JOIN 语法INNER JOIN, LEFT OUTER JOIN等)和表别名,以使您的查询更易于理解和阅读 - 例如:

SELECT 
    stu.Id_num, stu.Stu_name, 
    df.Dvf, 
    tf.Acy, tf.Tui_fee, 
    rf.Reg_fee, 
    ffuf.Acy, ffuf.FFF, 
    ef.E_typ, ef.Exm_fee, 
    mi.Instm, mi.Paid     
FROM 
    [SUIMT].[dbo].[Stu_info] stu
INNER JOIN 
    [SUIMT].[dbo].[Development_fee] df ON df.Id_num = stu.id_num
INNER JOIN 
    [SUIMT].[dbo].[Tuition_fee] tf ON tf.Id_num = stu.id_num
INNER JOIN 
    [SUIMT].[dbo].[Registration_fee] rf ON rf.Id_num = stu.id_num
INNER JOIN  
    [SUIMT].[dbo].[Form_fill_up_fee] ffuf ON ffuf.Id_num = stu.id_num
INNER JOIN 
    [SUIMT].[dbo].[Examination_fee] ef ON ef.Id_num = stu.id_num
INNER JOIN  
    [SUIMT].[dbo].[monthly_instal] mi ON mi.Id_Num = stu.Id_num

这样,您甚至根本不需要丑陋的WHERE条款......

于 2012-08-04T10:54:59.423 回答
0

AND用or分隔你的子句OR,而不是逗号

于 2012-08-04T10:45:21.943 回答
0
SELECT Stu_info.Id_num, Stu_info.Stu_name, Development_fee.Dvf, Tuition_fee.Acy, Tuition_fee.Tui_fee, Registration_fee.Reg_fee, Form_fill_up_fee.Acy, Form_fill_up_fee.FFF, Examination_fee.E_typ, Examination_fee.Exm_fee, monthly_instal.Instm, monthly_instal.Paid     
FROM [SUIMT].[dbo].[Stu_info], 
    [SUIMT].[dbo].[Development_fee], 
    [SUIMT].[dbo].[Tuition_fee], 
    [SUIMT].[dbo].[Registration_fee], 
    [SUIMT].[dbo].[Form_fill_up_fee], 
    [SUIMT].[dbo].[Examination_fee], 
    [SUIMT].[dbo].[monthly_instal]
WHERE Development_fee.Id_num=Tuition_fee.Id_num and 
      Registration_fee.Id_num=Form_fill_up_fee.Id_num and 
      Examination_fee.Id_num=monthly_instal.Id_num  and
      monthly_instal.Id_num=Stu_info.Id_num
于 2012-08-04T10:49:32.377 回答