I have 5 tables. Namely user
, reference_1
, reference_2
, reference_3
and question
user => (user_id,user_name,user_emailid,user_mobno)
reference_1 => (ref_id_1,user_id,ref_name,ref_email,ref_mobno)
reference_2 => (ref_id_2,user_id,ref_name,ref_email,ref_mobno)
reference_3 => (ref_id_3,user_id,ref_name,ref_email,ref_mobno)
question => (que_id,user_id,ref_id_1,ref_id_2,ref_id_3,que1_name,que2_name,que3_name,que4_name,que5_name,que6a_name,que6b_name,que7_name,qa1,qa2,qa3,qa4,qa5,qa6a,qa6b,qa7,flag)
I fired 4 consecutive queries:
Query 1: Fetching the data from the user
table and question
using a LEFT JOIN
select u.user_name,u.user_emailid,u.user_mobno,
q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from user u
LEFT JOIN question q
on u.user_id = q.user_id
WHERE q.flag = 1
Query 2: Fetching the data from the user
table and reference_1
using LEFT JOIN
select r1.ref_name,r1.ref_email,r1.ref_mobno,
q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from reference_1 r1
left join question q
on r1.ref_id_1 = q.ref_id_1
Query 3: Fetching the data from the user
table and reference_2
using LEFT JOIN
select r2.ref_name,r2.ref_email,r2.ref_mobno,
q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_nam e,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from reference_2 r2
left join question q
on r2.ref_id_2 = q.ref_id_2
Query 4: Fetching the data from the user
table and reference_3
using LEFT JOIN
select r3.ref_name,r3.ref_email,r3.ref_mobno,
q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from reference_3 r3
left join question q
on r3.ref_id_3 = q.ref_id_3
Now there is a requirement to combine all 4 queries in one to show the data.
I tried JOIN all these queries in one query
select u.user_name,u.user_emailid,u.user_mobno,
q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7,
r1.ref_name,r1.ref_email,r1.ref_mobno, q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7,
r2.ref_name,r2.ref_email,r2.ref_mobno, q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7,
r3.ref_name,r3.ref_email,r3.ref_mobno, q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from user u
LEFT JOIN question q
on u.user_id = q.user_id
WHERE q.flag = 1
LEFT JOIN reference_1 r1
LEFT JOIN question q1
on r1.ref_id_1 = q1.ref_id_1
LEFT JOIN reference_2 r2
LEFT JOIN question q2
on r2.ref_id_2 = q2.ref_id_2
LEFT JOIN reference_3 r3
LEFT JOIN question q3
on r3.ref_id_3 = q3.ref_id_3
But this query is not working.
Because you screwed syntax order...
Multi join works like this:
select u.user_name,u.user_emailid,u.user_mobno, q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q. que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7,
r1.ref_name,r1.ref_email,r1.ref_mobno, q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q. que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7,
r2.ref_name,r2.ref_email,r2.ref_mobno, q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q. que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7,
r3.ref_name,r3.ref_email,r3.ref_mobno, q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q. que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from question q
LEFT JOIN user u USING(user_id)
LEFT JOIN reference_1 r1 USING(ref_id_1)
LEFT JOIN reference_2 r2 USING(ref_id_2)
LEFT JOIN reference_3 r3 USING(ref_id_3)
WHERE q.flag = 1
Where must be at the end... Joins must be stated completely and cannot be mixed. Order in dependency works you can have sub and subsub and so on dependencies without a problem.
One thing you did pretty good: You set-up same name for foreign key in both JOIN tables. In this case you can simply replace r1.t1 = r2.t2 stuff and just define the join table in function USING(t1). :)
Try this query. Uses nested join to the reference tables onto the question table.
SELECT u.user_name
,u.user_emailid
,u.user_mobno
,q.que1_name
,q.qa1
,q.que2_name
,q.qa2
,q.que3_name
,q.qa3
,q.que4_name
,q.qa4
,q.que5_name
,q.qa5
,q.que6a_name
,q.qa6a
,q.que6b_name
,q.qa6b
,q.que7_name
,q.qa7
,r1.ref_name
,r1.ref_email
,r1.ref_mobno
,r2.ref_name
,r2.ref_email
,r2.ref_mobno
,q.que1_name
,r3.ref_name
,r3.ref_email
,r3.ref_mobno
FROM dbo.user u
LEFT JOIN question q
LEFT JOIN reference_1 r1 ON r1.ref_id_1 = q.ref_id_1
LEFT JOIN reference_2 r2 ON r2.ref_id_2 = q.ref_id_2
LEFT JOIN reference_3 r3 ON r3.ref_id_3 = q.ref_id_3 ON u.user_id = q.user_id
WHERE q.flag = 1