2013-02-08 1 views
0

Это мой запрос:Как сделать UNION 2 ЗЕЬЕСТ

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; 

В моей таблице «parovi» есть 2 колонки «par_m» и «par_z». Во второй таблице «unos_golub» есть «ID» и некоторые другие. Теперь мне нужно получить значения из «par_m» и «par_z», сопоставить их в «unos_golub» и получить некоторые данные.

Например, если я получаю par_m = 91 и par_z = 92, мне нужно найти эти числа в ID «unos_golub» и получить разные данные для 91 и 92 и показать их. Я думаю, может быть, UNION ALL может помочь, но он не работает.

вот мои таблицы

  1. стол: parovi
  2. стол: unos_golub

table: parovi

table: unos_golub

+0

Вы хотите, чтобы две физические строки, по одной для каждой записи, или вы хотите, чтобы одна строка показывала соответствующие столбцы в значениях «M» и «Z»? – DRapp

+0

Я хочу показать строки из таблицы2, используя столбцы для значений «M» и «Z» – FosAvance

+0

Это немного запутывает то, что вам нужно. Можете ли вы показать нам ожидаемые результаты и каковы ваши dbms? – Kaf

ответ

2

Этот подход поставит все на одной строке для соответствующие значения «M» и «Z». Заметьте, что я присоединяюсь к TWICE в таблице «unos_golub», но с разными псевдонимами. Итак, теперь у меня есть одна запись parovi, указывающая на соответствующие «M» и «Z» версии одновременно. И можно вытащить столбцы из каждого, тем самым давая им псевдонимы имена столбцов результата, суффикс «M» и «Z», указывающие их соответствующее происхождение.

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"; 

За ваш комментарий хотения показать все строки, запрос необходимо только одно небольшое изменение. При выполнении UNION запросы должны иметь одинаковые имена столбцов. Вы изменили один из них через

unos_golub.broj_goluba as broj 
vs 
unos_golub.broj_goluba as broj2 

, который заставил бы его отказаться от запроса. Имена столбцов различны, поэтому они не работают.

+0

Это не может быть так. union всегда принимает первый набор столбцов, и если типы данных одинаковы и количество столбцов равно, то это должно быть хорошо. (sql server + mysql + PostgreSQL) – Kaf

+0

@Kaf, я согласен, однако некоторые двигатели ведут себя по-другому, поэтому я не смог подтвердить свой общий тег «sql», предлагаемый :) – DRapp

+1

@FosAvance, измените нижний «u», чтобы соответствовать остальной части ссылки псевдонима. Я обновил свой ответ. – DRapp