2010-05-01 6 views
1

Je suis en train d'écrire une déclaration SQLutiliser une instruction select SQL pour obtenir des paramètres pour instruction select 2

J'ai 2 tables de magasin & StoreTransactions. Ma première commande select ressemble

SELECT [StoreID],[ParentStoreID] 
FROM Store 

choses très simples. Comment est-ce que je prends les StoreID's retournés et les utilise pour ma 2ème déclaration de sélection?

SELECT [StoreTransactionID],[TransactionDate],[StoreID] 
FROM StoreTransactions 
WHERE StoreID = returned values from the above query 

Toute aide serait géniale!

Répondre

3
SELECT [StoreTransactionID],[TransactionDate],[StoreID] 
FROM StoreTransactions 
WHERE StoreID in (select StoreId from Store) 

Ceci est connu sous le nom de sélection imbriquée ou sélection interne.

+0

Bonjour Joel, Je reçois une erreur Msg 116, niveau 16, état 1, ligne 16 Une seule expression peut être spécifiée dans la liste de sélection lorsque la sous-requête n'est pas introduite avec EXISTS. Je vais regarder plus loin dans les sélections imbriquées. Merci –

+0

RE: Votre erreur Vous devez avoir changé cette partie pour avoir plus d'une colonne? * sélectionnez StoreId dans Store * ou utilisez = au lieu de dans? –

+0

@diver, Lorsque vous utilisez, votre sélection imbriquée doit renvoyer un ensemble semblable à un tableau (c'est-à-dire une colonne). Notez le sql que j'ai écrit a seulement un champ dans le select imbriqué. – Joel

1

Couple d'autres façons de le faire ...

SELECT [StoreTransactionID],[TransactionDate],[StoreID] 
FROM StoreTransactions st 
WHERE EXISTS 
(
SELECT * 
FROM Store s 
WHERE s.[StoreID] = st.[StoreID] 
) 

Et

SELECT [StoreTransactionID],[TransactionDate],st.[StoreID] 
FROM StoreTransactions st 
INNER JOIN Store s ON s.[StoreID] = st.[StoreID] 
+0

Les deux bonnes suggestions. Personnellement, je préfère une jointure interne à un select imbriqué. – Joel

1

Une autre façon d'écrire est d'utiliser un INNER JOIN

SELECT [StoreTransactionID],[TransactionDate],[StoreTransactions.StoreID] 
FROM StoreTransactions INNER JOIN Store ON StoreTransactions.StoreID=Store.StoreID 

Cela peut être plus efficace dans certains SGBDR. Si votre requête Store inclut également une clause WHERE, vous pouvez simplement l'ajouter à la requête ci-dessus.

+0

Merci les gars. Oui mon mauvais j'ai mélangé la commande SQL. –

Questions connexes