【问题标题】:How to make UNION of 2 SELECT statement如何使 2 SELECT 语句的 UNION
【发布时间】:2013-02-08 17:50:44
【问题描述】:

这是我的查询:

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,我需要在“unos_golub”的 ID 中找到这些数字,并获取 91 和 92 的不同数据并显示出来。 我想也许 UNION ALL 可以提供帮助,但它不起作用。

这是我的桌子

  1. 表:parovi
  2. 表:unos_golub

【问题讨论】:

  • 您想要两个物理行,每个条目一个,还是想要一行显示每个“M”和“Z”值的相应列?
  • 我想通过使用每个“M”和“Z”值的列来显示 table2 中的行
  • 你需要的东西有点混乱。你能告诉我们预期的结果吗?你的 dbms 是什么?

标签: c# sql select union union-all


【解决方案1】:

这种方法会将所有“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

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

【讨论】:

  • 不可能的。 union 总是采用第一组列,如果数据类型相同且列数相等,则应该没问题。 (sql server + mysql + PostgreSQL)
  • @Kaf,我同意,但是有些引擎的行为不同,所以我无法确认提供的通用“sql”标签:)
  • @FosAvance,更改为较低的“u”以匹配其余的别名引用。我更新了我的答案。
  • @FosAvance,就是这样,我提供的查询,或者联合列名的修复:)
  • @FosAvance,不...查看别名列名...您需要 reader["broj_M"] 和 reader["broj_Z"]、reader["drzava_M"] 和 reader[ "drzava_Z"] 分别...根据列的命名方式,记录将全部位于同一行。
猜你喜欢
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 2010-12-02
  • 1970-01-01
  • 2017-07-07
  • 1970-01-01
相关资源
最近更新 更多