2013-02-08 134 views
0

这是我的查询UNION:如何使2 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; 

在我的表 “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 2013-02-08 17:56:42

+0

我想通过使用列中的“M”和“Z”值来显示table2中的行 – FosAvance 2013-02-08 17:59:04

+0

这有点让您感到困惑。你能告诉我们预期的结果吗?你的dbms是什么? – Kaf 2013-02-08 18:14:38

回答

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 2013-02-08 18:12:04

+0

@Kaf,我同意,但是一些引擎的行为不同,所以我不能确认每个通用的“sql”标签:) – DRapp 2013-02-08 18:14:27

+1

@FosAvance,改变为降低“u”以匹配其余的别名引用。我更新了我的答案。 – DRapp 2013-02-08 18:17:10