Trouver le numéro de l'itinéraire de bus à partir des requêtes sql

Je conçois la database d'routes de bus. j'ai trois tables comme ci-dessous,

EmplacementDétails

Location ID Location Name --------------------------- 1 A 2 B 3 C 4 D 5 E 6 F 7 G 8 H 9 I 

RouteDetails

  RouteId RouteNumber -------------------- 1 101 2 102 3 103 

RouteLocationDétails

  RouteId LocationId ------------------ 1 3 1 4 1 5 1 6 2 2 2 3 2 4 2 5 2 6 

Je veux find les numéros de route pour le nom d'location entré par l'user. Par exemple, si l'user veut parcourir l'location de «C» à «F», il doit connaître le numéro de l'itinéraire disponible pour cet location. Dans ce cas, le numéro de l'itinéraire 2 est disponible pour cet itinéraire ( Routenumber 101, 102 )

Quelqu'un peut-il me dire comment écrire la requête sql pour cela?

Si vous avez seulement besoin de gérer une requête simple comme A à B, vous pouvez vous joindre à la table RouteLocationDetails

 select r1.RouteId from RouteLocationDetails r1 join RouteLocationDetails r2 on r1.RouteId = r2.RouteId where r1.LocationId <> r2.LocationId and r1.LocationId = 'LocationNameOfC' and r2.LocationId = 'LocationNameOfF' 

Juste une illustration simple, vous devez joindre les deux autres tables pour les informations nécessaires.

Vous pouvez utiliser ci-dessous et assurez-vous de passer deux noms de lieux …

  select rd.RouteNumber,r.RouteId from #LocationDetails l Join #RouteLocationDetails r on l.[Location ID]=r.LocationId join #RouteDetails rd on r.RouteId=rd.RouteId where [Location Name]='C' or [Location Name]='F' group by rd.RouteNumber,r.RouteId having count(r.LocationId)=2 

Sortie

 RouteNumber RouteId 101 1 102 2 

J'ai créé le SQL Fiddle suivant qui devrait fonctionner dans votre cas: http://sqlfiddle.com/#!6/4824f/2

Créer les tables et insert datatables:

 create table LocationDetails ([Location ID] int, [Location Name] varchar(1)) INSERT INTO LocationDetails ([Location ID],[Location Name]) VALUES(1, 'A') INSERT INTO LocationDetails ([Location ID],[Location Name]) VALUES(2, 'B') INSERT INTO LocationDetails ([Location ID],[Location Name]) VALUES(3, 'C') INSERT INTO LocationDetails ([Location ID],[Location Name]) VALUES(4, 'D') INSERT INTO LocationDetails ([Location ID],[Location Name]) VALUES(5, 'E') INSERT INTO LocationDetails ([Location ID],[Location Name]) VALUES(6, 'F') INSERT INTO LocationDetails ([Location ID],[Location Name]) VALUES(7, 'G') INSERT INTO LocationDetails ([Location ID],[Location Name]) VALUES(8, 'H') INSERT INTO LocationDetails ([Location ID],[Location Name]) VALUES(9, 'I') create table RouteDetails (RouteId int, RouteNumber int) INSERT INTO RouteDetails (RouteId, RouteNumber) VALUES(1, 101) INSERT INTO RouteDetails (RouteId, RouteNumber) VALUES(2, 102) INSERT INTO RouteDetails (RouteId, RouteNumber) VALUES(3, 103) create table RouteLocationDetails (RouteId int, LocationId int) INSERT INTO RouteLocationDetails (RouteId, LocationId) VALUES(1, 3) INSERT INTO RouteLocationDetails (RouteId, LocationId) VALUES(1, 4) INSERT INTO RouteLocationDetails (RouteId, LocationId) VALUES(1, 5) INSERT INTO RouteLocationDetails (RouteId, LocationId) VALUES(1, 6) INSERT INTO RouteLocationDetails (RouteId, LocationId) VALUES(2, 2) INSERT INTO RouteLocationDetails (RouteId, LocationId) VALUES(2, 3) INSERT INTO RouteLocationDetails (RouteId, LocationId) VALUES(2, 4) INSERT INTO RouteLocationDetails (RouteId, LocationId) VALUES(2, 5) INSERT INTO RouteLocationDetails (RouteId, LocationId) VALUES(2, 6) 

Interroger le et de l'location:

 select RouteNumber from LocationDetails ldfrom inner join RouteLocationDetails rldfrom on rldfrom.LocationId = ldfrom.[Location Id] inner join RouteLocationDetails rldto on rldto.RouteId = rldfrom.RouteId inner join LocationDetails ldto on ldto.[Location Id] = rldto.LocationId inner join RouteDetails rd on rd.RouteId = rldto.RouteId where ldfrom.[Location Name] = 'C' and ldto.[Location Name] = 'F'