2016-12-02 2 views
0

J'utilise ADO pour interroger la base de données chose (fichier excel, accdb, mdb ...) ce qui me confond maintenant: Est-il possible de sélectionner la table/DB avec la condition mise en place à l'intérieur de SQL? normalement:Pouvez-vous sélectionner les données de spécifier Table/Base de données avec condition?

SELECT Field1 FROM table1 

ce que j'attends:

if A=2 then SELECT F1 FROM table1 else SELECT F1 from table2 

Ou comme ceci:

SELECT F1 from switch(A=2, table1, true, Table2) 

Je peux faire cela en VB en créant la chaîne SQL de condition, mais je ne savoir si une instruction SQL native peut le faire? (Tableau commutateur/ExternalDB pour sélectionner)

+0

Oui, vous pouvez le faire, mais qui est essentiellement le long de la ligne du même à l'vb. Vous pouvez créer un SQL dynamique. –

+0

Il vaut mieux le faire en vb/C# qu'en SQL. Générer SQL en fonction de la variable, puis exécuter – GurV

+0

Merci guy, code la chaîne SQL est trop ez. Je veux juste voir s'il y a un moyen d'utiliser le SQL natif (mais pas de réduire les performances dans l'ensemble). – Sum

Répondre

0

Vous pouvez le faire dans SQL dynamique le plus facilement. Autrement dit, construisez la requête que vous voulez.

Sinon, vous pouvez faire:

SELECT F1 
FROM table1 
WHERE "A" = 2 
UNION ALL 
SELECT F1 
FROM table2 
WHERE "A" <> 2; 

C'est, UNION ALL combine les deux possibilités. Le "A" représente le fait que A est une variable. La syntaxe exacte dépend de la base de données et du mécanisme d'accès.

+0

de cette façon, je pense que la performance globale baissera beaucoup si table1 et table2 content beaucoup de données (plus de 1m lignes). après tout, tu m'as montré que c'est possible ... Merci Gordon. juste, s'il y a plus de 2 table, nombre dynamique de la table, ce sera complexe plus que le problème lui-même lol – Sum

+0

@Sum. . . Le fait qu'une requête lise des données à partir de tables lorsqu'une condition constante est fausse dépend de l'optimiseur de base de données. La plupart des optimiseurs renverront un jeu de résultats vide très rapidement. –

+0

le problème est comme ceci, il y a 3 tables de même format, chaque contenu de table spécifie le mois (tbl1 1-> 4, tbl2 5-> 9, tbl3 10-> 12). Si j'ai seulement besoin de demander des données à partir d'un mois quelconque (1 à 12) alors je dois interroger à partir d'UNION ALL (tbl1 + tbl2 + tbl3) <--- ce processus de ralentissement. J'essaie donc de trouver l'astuce qui rend PC assez intelligent pour charger uniquement la table nécessaire (puisque chaque table contient plus de 1m d'enregistrements). – Sum

0

si vous utilisez VB puis:

sql = "select f1 from " & if(A=2,"table1", "table2") 

Vous pouvez le faire dans une langue essentiellement.