Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

using where and inner join in mysql

I have three tables.

locations

ID   | NAME | TYPE | 1    | add1 | stat | 2    | add2 | coun |  3    | add3 | coun | 4    | add4 | coun |  5    | add5 | stat |  

schools

 ID | NAME    1  | sch1       2  | sch2  3  |sch3  

school_locations

 ID |LOCATIONS_ID |SCHOOL_ID  1  | 1           |1  2  | 2           |2  3  | 3           |3 

Here the table locations contains all the locations of the application.Locations for school are called by ID's.

when i use the query

select locations.name from locations where type="coun"; 

it displays names with type "coun"

But I want to display locations.name where only school_locations have type="coun"

i tried following queries, but none seems to be working

select locations.name  from locations  where type="coun"  inner join school_locations     on locations.id=school_locations.location_id  inner join schools     on school_locations.school.id=schools.id; 

and

select locations.name  from locations  inner join school_locations     on locations.id=school_locations.location_id  inner join schools     on school_locations.school.id=schools.id  where type="coun"; 

is it possible to use multiple inner joins in queries, or is there another way?

like image 745
sgi Avatar asked Sep 08 '09 07:09

sgi


People also ask

Can I use inner join and WHERE?

To use the WHERE clause to perform the same join as you perform using the INNER JOIN syntax, enter both the join condition and the additional selection condition in the WHERE clause. The tables to be joined are listed in the FROM clause, separated by commas. This query returns the same output as the previous example.

What is the use of inner join in MySQL?

The INNER JOIN keyword selects records that have matching values in both tables.

What is the difference between WHERE and inner join?

They are exactly the same in SQL server. There is no performance difference.


2 Answers

    SELECT `locations`.`name`       FROM `locations` INNER JOIN `school_locations`         ON `locations`.`id` = `school_locations`.`location_id` INNER JOIN `schools`         ON `school_locations`.`school_id` = `schools_id`      WHERE `type` = 'coun'; 

the WHERE clause has to be at the end of the statement

like image 189
knittl Avatar answered Oct 03 '22 01:10

knittl


Try this:

SELECT Locations.Name, Schools.Name FROM Locations INNER JOIN School_Locations ON School_Locations.Locations_Id = Locations.Id INNER JOIN Schools ON School.Id = Schools_Locations.School_Id WHERE Locations.Type = "coun" 

You can join Locations to School_Locations and then School_Locations to School. This forms a set of all related Locations and Schools, which you can then widdle down using the WHERE clause to those whose Location is of type "coun."

like image 25
David Andres Avatar answered Oct 03 '22 03:10

David Andres