user1575936
user1575936

Reputation: 7

SQL Server 2008 error 4145

I have used following code there in 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

but it shows error which says

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

Would you please help me to solve this problem? I would be grateful for providing an example so I could understand it easier.

Upvotes: 1

Views: 2018

Answers (4)

marc_s
marc_s

Reputation: 754438

You should use proper ANSI SQL-92 JOIN syntax (INNER JOIN, LEFT OUTER JOIN etc.) and table alias to make your query more understandable and easier to read - something like:

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

This way, you don't even need an ugly WHERE clause at all.....

Upvotes: 1

AnandPhadke
AnandPhadke

Reputation: 13496

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

Upvotes: 0

Richard
Richard

Reputation: 30618

Separate your clauses in where by AND or OR, not a comma

Upvotes: 0

MatBailie
MatBailie

Reputation: 86706

What is the WHERE clause meant to achieve? Do you mean this?

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

Also, using FROM tableA, TableB, TableC is a very old style notation. ANSI-92 standard uses 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

Upvotes: 1

Related Questions