Reputation: 7
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
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
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
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