2011-07-06 4 views
1

J'ai 2 tables - une a ProductID, [Product Name in English] et Price. L'autre table a ProductID et [Product Name in Spanish].MS SQL: Comment sélectionner parmi 2 tables?

Je veux une requête de sélection qui me donne le nom du produit en espagnol et le prix.

Comment faire cela en utilisant MS SQL?

En termes de conception de base de données, est-ce que je peux tout simplement mettre tout dans une table et simplifier la requête de sélection? Par exemple ProductID, NameEnglish, NameSpanish, Price.

+1

Non, ne les combinez pas dans la même table. que se passe-t-il quand vous voulez aussi des descriptions et d'autres choses dans d'autres langues, peut-être plus que simplement l'espagnol? Qu'en est-il des formats de date régionaux et de la monnaie? Vérifiez dans la conception de bases de données pour les paramètres régionaux si vous allez dans une direction multilingue. – Nikki9696

Répondre

6
SELECT t2.[Product Name in Spanish], t1.Price 
    FROM table1 t1 -- The English version 
     INNER JOIN table2 t2 -- The Spanish version 
      ON t1.ProductID = t2.ProductID 

En ce qui concerne votre question de conception, pensez à l'expansion future. Voulez-vous un jour stocker le nom dans une autre langue comme le français? Vous pourriez éventuellement vouloir introduire un tableau de langues et un tableau de références croisées reliant le produit et la langue. Quelque chose comme:

enter image description here

+0

Avec cette configuration, vous n'avez pas besoin du champ "EnglishName" car il sera inclus dans la traduction du champ pour l'id de la langue anglaise. Mais c'est la bonne solution. Pourrait également faire une vue pour faire les tableaux agissent comme 1 table à des fins de sélection. –

+0

@ t-clausen.dk: Certes, c'est un peu une dénormalisation, mais j'aime garder la description anglaise (ou quelque soit votre langue maternelle) avec le produit juste pour donner un sens aux lignes de la table. –

1

Combinant les seraient la meilleure solution, mais en utilisant un join résoudre votre problème.

1

Vous pouvez utiliser l'opérateur JOIN:

SELECT 
    tab2.[Product name in Spanish], 
    tab1.Price 
FROM 
    table1 tab1 
INNER JOIN 
    table2 tab2 on tab2.ProductID=tab1.ProductID 
1

Vous pouvez le faire avec une jointure interne, mais je ne vois aucune raison d'avoir deux tables séparées, je les combiner personnellement.

1
SELECT SP.ProductName, PRODUCT.Price from PRODUCT as PRODUCT 
    JOIN SPANISHPRODUCTS as SP ON PRODUCT.ProductID = SP.ProductID 
Questions connexes