2012-09-19 9 views
2

ce que je veux, c'est tout l'enregistrement de tbmedAssign où zoneid ou nom de zone donné en paramètre. comment écrire une requête pour cela? aidez s'il vous plaît.comment extraire des données de plusieurs tables?

nom de la table tablzone

zone_id(PK) ZoneName 
----------- -------- 
1    east 
2    west 
3    north 
4    south 

tbluser 

usrId(PK) userzoneId(FK to tblzone) username 
-------- ------------------------- ------------ 
1   1       manish 
2   3       rahul 
3   2       ankit 
4   4       amir 
5   2       rashmi 
6   1       akash 
tbldoctor 

docId(PK) usrId(Fk to tbluser)  docname 
--------  --------------------  ------------ 
1    2      hemant 
2    2      chintu 
3    3      rahim 
4    1      salman 
5    3      kishor 
6    3      saurabh 
7    2      banti 

tblmedAssign 

transId(Pk) doctorId(FK to tbldoctor) medId(FK) dateInsert 
---------- ------------------------- ------ ----------- 
1   2       2  20/12/2012 
2   3       3  21/12/2012 
3   2       3  23/12/2012 
4   4       1  24/12/2012 

tblmedia

medid(PK) medianame 
--------- --------- 
1   casfung 
2   inem 
3   media1 
4   tplan 
5   casfung test 

je veux tout le dossier de tblmedAssign où le médecin appartient à l'utilisateur particulier tbluser et l'utilisateur tbluser est appartient à la zone particulière et la zone id est fourni en tant que paramètre? par exemple zoneid = 1;

je veux choisir mediaName aussi dans le dossier

+0

Votre explication a besoin d'une clarification de bits. – Debloper

Répondre

3

Fondamentalement, vous devez joindre les quatre tables avec leurs colonnes de liaison. Essayez ceci,

SELECT a.*, 
     b.*, 
     c.*,   
     d.*, 
     e.* 
FROM tblmedAssign a 
     INNER JOIN tblDoctor b 
      ON a.doctorID = b.docID 
     INNER JOIN tblUser c 
      ON b.usrID = c.usrID 
     INNER JOIN tblZone d 
      ON c.userzoneID = d.zone_ID 
     INNER JOIN tblmedAssign e 
      ON e.medid = a.medid 
WHERE d.zone_id = @zone_id OR -- supply value here 
     d.zoneName = @zoneName 
+0

thanx john cela a fonctionné. puis-je demander quelques requêtes plus complexes? –

+0

@ManishMalviya sûr. si je pouvais: D –

+0

john j'ai mis à jour 1 table de plus tblmedia je veux sélectionner medianame de l'enregistrement particulier. –

0

En JOIN ing les trois tables, quelque chose comme:

SELECT -- what you want to select 
FROM tblmedAssign ta 
LEFT JOIN tbldoctor td ON ta.doctorId = td.docId 
LEFT JOIN tbluser tu ON td.usrId = tu.usrId 
LEFT JOIN tablzone tz ON tu.userzoneId = tz.zone_Id 
WHERE tz.zone_Id = @zoneIdParam 
0
select * 
from tblmedAssign 
inner join tbldoctor on tbldoctor.docId = tblmedAssign.doctorId 
inner join tbluser on tbluser.usrId = tbldoctor.usrId 
inner join tablzone on tablzone.zone_id = tbluser.userzoneId 
where tablzone.ZoneName = 'east' 
or tablzone.zone_id = 2 
0

Cela devrait servir votre but

select * 
from 
tblmedAssign, tbldoctor, tbluser, tablzone 
where 
tblmedAssign.doctorId = tbldoctor.docId and 
tbldoctor.usrId = tbluser.usrId and 
tbluser.userzoneId = tablzone.zone_id and 
(tablzone.zone_id = x or tablzone.ZoneName = 'y') 
Questions connexes