2013-02-08 1 views
0

Ceci est ma requête:Comment faire UNION 2 instruction SELECT

string x1 = "SELECT unos_golub.drzava, unos_golub.spol, unos_golub.broj_goluba as broj, parovi.par_m, parovi.par_z,parovi.broj_para FROM parovi JOIN unos_golub ON (parovi.par_m=unos_golub.ID) WHERE parovi.uzgojni_par=1"; 
string x2 = "SELECT unos_golub.drzava, unos_golub.spol, unos_golub.broj_goluba as broj2, parovi.par_m, parovi.par_z,parovi.broj_para FROM parovi JOIN unos_golub ON (parovi.par_z=unos_golub.ID) WHERE parovi.uzgojni_par=1 ORDER BY broj_para ASC"; 
cmd.CommandText = x1+" UNION ALL "+x2; 

Dans ma table "parovi" il y a 2 colonnes "par_m" et "par_z". Dans la deuxième table "unos_golub" il y a "ID" et un autre. Maintenant, j'ai besoin d'obtenir des valeurs de "par_m" et "par_z", de les faire correspondre dans "unos_golub" et d'obtenir des données. Par exemple, si j'obtiens par_m = 91 et par_z = 92, je dois trouver ces nombres dans l'ID de "unos_golub" et obtenir des données différentes pour 91 et 92 et les montrer. Je pense que UNION ALL peut aider, mais ça ne marche pas.

voici mes tables

    Table
  1. : parovi
  2. table: unos_golub

table: parovi

table: unos_golub

+0

Voulez-vous deux lignes physiques, une pour chaque entrée, ou voulez-vous une ligne indiquant les colonnes respectives pour les valeurs "M" et "Z"? – DRapp

+0

Je veux afficher les lignes de table2 en utilisant des colonnes par les valeurs "M" et "Z" – FosAvance

+0

Il est peu confus ce dont vous avez besoin. Pouvez-vous nous montrer les résultats attendus et quels sont vos dbms? – Kaf

Répondre

2

Cette approche mettra tout sur une seule ligne pour la valeurs respectives "M" et "Z". Notez que je rejoins TWICE à la table "unos_golub", mais avec des alias différents. Donc, maintenant j'ai un enregistrement parovi pointant vers les versions respectives "M" et "Z" simultanément. Et peut tirer les colonnes de chacun, leur donnant ainsi des noms de colonne de résultat aliasés suffixant "M" et "Z" indiquant leur origine respective.

SELECT 
     parovi.par_m, 
     parovi.par_z, 
     parovi.broj_para, 
     unos_M.drzava as drzava_M, 
     unos_M.spol as spol_M, 
     unos_M.broj_goluba as broj_M, 
     unos_Z.drzava as drzava_Z, 
     unos_Z.spol as spol_Z, 
     unos_Z.broj_goluba as broj_Z 
    FROM 
     parovi 
     JOIN unos_golub as unos_M 
      ON parovi.par_m = unos_M.ID 
     JOIN unos_golub as unos_Z 
      ON parovi.par_m = unos_Z.ID 
    WHERE 
     parovi.uzgojni_par=1"; 

par votre commentaire de vouloir montrer toutes les lignes, votre requête devrait nécessiter un petit changement. Lors d'un UNION, les requêtes doivent avoir les mêmes noms de colonnes. Vous avez changé un o par

unos_golub.broj_goluba as broj 
vs 
unos_golub.broj_goluba as broj2 

qui lui ferait échouer la requête. Les noms des colonnes sont différents, échouant ainsi.

+0

Cela ne peut pas être le cas. union prend toujours le premier ensemble de colonnes et si les types de données sont identiques et le nombre de colonnes égal, il devrait être correct. (sql server + mysql + PostgreSQL) – Kaf

+0

@Kaf, je suis d'accord, mais certains moteurs se comportent différemment donc je ne pouvais pas confirmer par le générique "sql" tag offert :) – DRapp

+1

@FosAvance, changer pour abaisser "u" pour faire correspondre le reste de les références d'alias. J'ai mis ma réponse à jour. – DRapp

Questions connexes