如何制作2个SELECT语句的UNION

时间:2013-02-08 17:50:44

标签: c# sql select union union-all

这是我的疑问:

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. table:parovi
  2. table:unos_golub
  3. table: parovi

    table: unos_golub

1 个答案:

答案 0 :(得分: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

会使查询失败。列名不同,因此失败。