Ich habe drei Tabellen.mit where und inner join in mysql
Standorte
ID | NAME | TYPE |
1 | add1 | stat |
2 | add2 | coun |
3 | add3 | coun |
4 | add4 | coun |
5 | add5 | stat |
Schulen
ID | NAME
1 | sch1
2 | sch2
3 |sch3
school_locations
ID |LOCATIONS_ID |SCHOOL_ID
1 | 1 |1
2 | 2 |2
3 | 3 |3
Hier ist der Tisch loc ations enthält alle Standorte der Anwendung. Standorte für Schulen werden mit IDs aufgerufen.
Wenn ich die Abfrage
select locations.name from locations where type="coun";
zeigt es Namen mit dem Typ "coun"
Aber ich will locations.name anzuzeigen, in dem nur school_locations type = "coun" haben
i versuchte folgende Abfragen, aber keine scheint zu funktionieren
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;
und
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";
ist es möglich, mehrere innere Joins in Abfragen zu verwenden, oder gibt es einen anderen Weg?
werden die Backticks in msql benötigt? –
Nein, aber ich mag sie dort zu haben, es vermeidet Probleme mit seltsamen Tabellen- oder Spaltennamen (zB wählen, zählen,% b, etc.) und ist idiotensicher – knittl
Es macht auch die Abfrage leider nicht-ANSI-konform , die möglicherweise Probleme verursachen, wenn Sie versuchen, die Abfrage in eine andere Datenbank zu migrieren. Die richtige Art der Begrenzung von Bezeichnern ist mit "doublequotes", aber MySQL unterstützt dies standardmäßig nicht; Sie müssen ANSI_QUOTES in SQL_MODE setzen, um das zu bekommen. Das vermasselt dann natürlich Ihr String-Literal "coun", das unabhängig von SQL_MODE mit einfachen Anführungszeichen geschrieben werden sollte. – bobince