2009-10-23 5 views

Répondre

3

Celui-ci est difficile parce que c'est une condition "OU" plutôt qu'un "ET". Mais je pense que ce serait le faire:

SELECT 
     [Name].[NameValueID], 
     [Name].[NameTypeID], 
     [Name].[NameID], 
     [Name].[Value] 
FROM [Name] 
INNER JOIN (SELECT NameTypeID FROM @tbNameType) t ON t.NameTypeID=Name.NameTypeID 

UNION 

SELECT 
     [Name].[NameValueID], 
     [Name].[NameTypeID], 
     [Name].[NameID], 
     [Name].[Value] 
FROM [Name] 
INNER JOIN (SELECT NameID FROM @tbName) t ON t.NameID = Name.NameID 
+0

Wow, c'était rapide .. Je vais lui donner un souffle! – Gribbler

+2

Cela le ferait ... mais il me semble chic, beaucoup plus que la requête originale. Pourquoi * faut-il * être une jointure interne? Pour la performance, j'essaierais des jointures externes, ou peut-être des EXISTS. –

+0

Il ne doit pas être une jointure iner, mais on m'a demandé de supprimer les instructions Where In et d'utiliser INNER JOINS à la place, je suppose que s'il y avait quelque chose de plus net utilisant une jointure différente, je pourrais l'utiliser. Je suis juste en train d'apprendre le SQL et de le trouver un peu compliqué! – Gribbler

3
SELECT DISTINCT 
    Name.NameValueID, 
    Name.NameTypeID, 
    Name.NameID, 
    Name.Value 
FROM 
    Name 
    LEFT JOIN @tbNameType a ON a.NameTypeID=Name.NameTypeID 
    LEFT JOIN @tbName b ON b.NameID=Name.NameID 
WHERE a.NameTypeID IS NOT NULL OR b.NameID IS NOT NULL 
+0

Salut, Merci, j'ai décidé d'aller avec ceci dans mon code, bien que l'autre réponse soit marquée comme réponse car c'était la question que j'ai posée! Désolé! – Gribbler

+0

Je sais, je l'ai posté seulement parce qu'il devrait être plus efficace que les jointures internes + l'union. –