2010-11-30 6 views
0

Aucun SGBD particulier à l'esprit, comment pourrais-je faire ce qui suit:question SQL Query

# There are many tables per one restaurant, many napkins per one table 
# Pseudo SQL 

SELECT RESTAURANT WHERE ID = X; 
SELECT ALL TABLES WHERE RESTAURANT_ID = RESTAURANT.ID; 
SELECT ALL NAPKINS WHERE TABLE_ID = TABLE.ID; 

Mais, dans une requête? J'ai utilisé un JOIN pour obtenir toutes les tables dans la même requête que le restaurant, mais est-il possible d'obtenir toutes les serviettes pour chaque table, dans la même requête?

Répondre

3
select * -- replace * with the columns you need... 
from restaurant as r 
    inner join tables as t on t.restaurant_id = r.id 
    inner join napkins as n on n.table_id = t.id 
where r.id = [restaurant id] 
+0

@John - J'aurais besoin de toutes les colonnes de 'restaurant', mais une seule fois, vous voyez ce que je veux dire. Si la requête renvoie une copie de restaurant pour chaque autre objet qu'elle renvoie, cela devrait être qualifié de pessimisation, non? – orokusaki

+0

@orokusaki cela ressemble à une préoccupation de présentation, qui devrait être traitée par l'application consommant ces données. Pas vraiment un problème SQL ... – Jon

0

Vous finiriez certainement en répétant les tableaux et les informations de restaurant sur les lignes, comme:

restaurant1Tableau 1 Napkin1
restaurant1Tableau 1 Napkin2
restaurant1Tableau1 Serviette3
restaurant1 Tableau 2 Napkin4
restaurant2 Tableau 1 Napkin5

+0

seulement si vous faites 'select *' - ce qui est une mauvaise idée ... – Jon

+0

@ user490881 - donc il n'y a aucun moyen d'obtenir une copie du restaurant, une copie de chaque table, et un copie de chaque serviette en une seule requête? Qu'en est-il d'une jointure à gauche? – orokusaki

+0

@orokusaki - vous n'obtenez pas vraiment plusieurs copies de Table1, etc. Vous êtes présenté avec une seule ligne à la fois avec toutes les valeurs que vous avez demandées. –

0

Il semble que vous voulez revenir trois résultats séparés, pas un seul résultat avec les valeurs de répétition pour RESTAURANT_N ou Table_n.

En SQL, ceci est fait avec des procédures stockées qui peuvent renvoyer plusieurs ensembles de résultats. La syntaxe des procédures stockées varie selon les produits de base de données. Vous devez donc poser la question pour des produits spécifiques. Dans la procédure stockée, il y aura trois déclarations de sélection pour les RESTAURANTS, TABLES et NAPKINS. Les résultats des trois instructions sont renvoyés dans un ensemble à l'application, qui peut ensuite utiliser les résultats.