sql - Query returning same row twice as result -


i'm learning how write sql joing , wrote below query.

select patient.name, patient.address, patient.contactnumber, patient.disease, patient.joining patient inner join add_doctor on patient.docassign = 4534543 

here result i'm getting

**name  address     contactnumber   disease joining** sdfdvd  sdfdfbdfgd  3243453         sdvdvbd 01-jul-15 sdfdvd  sdfdfbdfgd  3243453         sdvdvbd 01-jul-15 

i'm confused on why there 2 same rows returned query result. please let me know how can fix , plese me understand why printing same row twice

patient table

id       name         disease    address    contactnumber   docassign   roomassign  joining    discharge 5656    sdfdvd       sdvdvbd    sdfdfbdfgd       3243453    4534543      general    01-jul-15   15-jul-15 65654   rgdgdgvds   sdfdfdgdfdb 1123fdffdbfd    4556767      4545            vip    08-jul-15   15-jul-15 

doctor table

id          name    address        email    contact       speciality    salary  password 4534543 fggfhdfs    rgghfgjfdj  gfhgfhjg    4365457567  dfsfhgjgkgfk    435435  safgdgd 4545    aaaaaaaaa   dffgdsg       fdfgds    43535       dffssgdhgd      324234  dfdhgggfdh 

in tsql inner join evaluated in 2 logical phases

  1. cross join
  2. filter out rows not satisfy filter condition in on clause.

to if table patient has row like:

name    address     contactnumber   disease joining   docassign dfdvd   sdfdfbdfgd  3243453         sdvdvbd 01-jul-15 4534543 

and table add_doctor has rows like:

docname test    test2   

so inner join first cross join done interim results as:

step1: patient cross join add_doctor  

this result in 1*2 = 2 rows as:

name    address     contactnumber   disease joining   docassign docname  dfdvd   sdfdfbdfgd  3243453         sdvdvbd 01-jul-15 4534543   test     dfdvd   sdfdfbdfgd  3243453         sdvdvbd 01-jul-15 4534543   test2     

in second logical phase of filerting based on on clause both rows qualifies filter condition

step2: on patient.docassign = 4534543 

the final result has 2 rows duplicate data:

name    address     contactnumber   disease joining sdfdvd  sdfdfbdfgd  3243453         sdvdvbd 01-jul-15 sdfdvd  sdfdfbdfgd  3243453         sdvdvbd 01-jul-15 

to remove duplicate data use distinct keyword , re-write query as:

select distinct p.name,                 p.address,                  p.contactnumber,                  p.disease,            p.joining  patient p  inner join add_doctor on p.docassign = 4534543 

you can refer different logical phases in query processed here...


Comments