2010-11-25 10 views
1

Je travaille sur un service de conversion de devise avec un ami, mais j'ai rencontré un gros problème, vers la fin du projet.Requête SQL JOIN - Confus

Nous avons 3 tables, currencys (Contient le code de devise, par exemple 'GBP', nom de devise, taux actuel et horodatage), pays (Contient le code du pays par exemple 'US' et le lieu auquel il fait référence) et le code de devise, il s'agit d'une clé primaire composite, par exemple une entrée d'échantillon serait comme ça: FR - EUR, IR - EUR, US - USD, GB - GBP, donc celle-ci liste tous les pays et leur devise associée).

On m'a dit d'utiliser un JOIN pour lier les tables, j'ai besoin de saisir tous les pays auxquels un code est associé et l'emplacement de ceux de la table de pays.

J'ai peu ou pas d'expérience avec SQL tristement, seules les requêtes de base, et la théorie de base de données n'est pas un point fort.

Tout conseil, aide, pointeurs bienvenus. Fondamentalement, joignez ensemble deux ou plusieurs tables liées ensemble pour faire une table plus grande

+1

Le design de base de données est le sous-sol de votre application. Construire une application sur un pauvre design db, c'est comme construire une maison carrée sur un sous-sol rond: une perte de temps et d'argent. Donc triple vérifier cette étape. –

Répondre

2

Si vous avez utilisé Excel, c'est comme un super VLOOKUP. La syntaxe JOIN augmente votre clause FROM. Vous spécifiez le type JOIN (INNER, LEFT OUTER, RIGHT OUTER + autres types et raccourcis) et une condition ON (où les lignes de la première table seront appariées à la deuxième table).

Compte tenu de vos trois tables, vous devriez être en mesure d'apporter toutes les informations que vous voulez avec quelque chose comme:

SELECT countries.name 
     , currency_countries.country_code 
     , currencies.name 
     , currency_countries.currency_code 
     , currencies.current_rate 
    FROM currency_country 
     INNER JOIN currencys 
     ON currency_country.currency_code = currencys.code 
     INNER JOIN countries 
     ON currency_country.country_code = countries.code 
0

Je suppose que vous avez l'intégrité référentielle entre vos tables, de telle sorte qu'une des lignes de Currency_Country n'existent pas sans une ligne Country et au moins une ligne Currency. Dans ce cas, la table Currency n'a pas besoin d'être utilisée.

Pour trouver tous les pays avec une devise associée, utilisez:

SELECT Countries.country_code, location 
FROM Countries INNER JOIN Currency_Country 
ON Countries.country_code = Currency_Country.country_code 
0

Vous devriez lire sur des choses DB/SQL simple, il est tout bon et bien obtenir la réponse d'ici, mais à nu min vous devrait comprendre comment faire des choses comme joindre des tables

Cela semble assez bon pour vous commencer: http://www.sql-tutorial.net/SQL-tutorial.asp

Quoi qu'il en soit, votre SQL:

[EDIT - 2 messages me battre au SQL;)]

0

Vous avez seulement besoin d'une table currency_country si vous avez une relation many-to-many entre les devises et les pays. Est-ce le cas? Sinon, vous n'avez besoin que d'une table de devises et d'une table de pays qui inclut le code ISO de la devise. (Notez que certaines devises n'ont aucun pays associé à eux)