2009-01-20 11 views
0

J'ai l'instruction SQL suivanteSQL - colonnes par défaut

SELECT table1.col1, table2.col2 FROM table1, table2 WHERE table1.t_id = table2.t_id 
UNION 
SELECT table1.col1 FROM table1 WHERE table1.col4 = null 

Le problème est, je cette syntaxe est invalide parce que la 2ème déclaration ne comprend pas le même nombre de colonnes que la 1ère déclaration.

Je ne peux pas inclure table2.col2 dans la deuxième instruction car je n'en ai pas besoin.

Y a-t-il une façon pour moi d'inclure une deuxième colonne par défaut dans la deuxième instruction afin que je puisse faire fonctionner cette requête?

Répondre

6

Oui, utilisez simplement une constante telle que 1 ou ''.

SELECT table1.col1, table2.col2 FROM table1, table2 WHERE table1.t_id = table2.t_id 
UNION 
SELECT table1.col1, '' as col2 FROM table1 WHERE table1.col4 = null 
+0

@Joel - vrai, mais je ne savais pas ce qu'il voulait dans la colonne. –

3

Peut-être que c'est ce que vous recherchez? Vous n'avez pas à retirer des valeurs de la table ... vous pouvez toujours les créer à partir de rien. :)

SELECT table1.col1, table2.col2 FROM table1, table2 WHERE table1.t_id = table2.t_id 
UNION 
SELECT table1.col1, 'whatever' FROM table1 WHERE table1.col4 is null 
0

Utilisez simplement des guillemets vides ('') dans votre liste de colonnes pour les colonnes que vous ne voulez pas dans la deuxième instruction SQL.

3

J'utilise généralement NULL (qui devrait forcer à tout type):

SELECT table1.col1, table2.col2 FROM table1, table2 WHERE table1.t_id = table2.t_id 
UNION 
SELECT table1.col1, NULL AS col2 FROM table1 WHERE table1.col4 = null 
1

Il est probablement préférable d'utiliser NULL pour la colonne factice, donc il va travailler plus comme une jointure externe (sauf si vous avez un besoin spécifique que la colonne ait une valeur particulière).

SELECT table1.col1, table2.col2 
    FROM table1, table2 WHERE table1.t_id = table2.t_id 
UNION 
SELECT table1.col1, null 
    FROM table1 WHERE table1.col4 = null 

0

Quand vous faites un syndicat ou tout le nombre de colonnes doit correspondre. Vous devez soit coder en dur une valeur à mettre dans cette colonne, soit interroger la vue de catalogue sys.columns et obtenir la valeur par défaut pour la colonne que vous insérez, et utiliser cette valeur là.

Questions connexes