这是我的疑问:
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可以提供帮助,但它不起作用。
这是我的表格
答案 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
会使查询失败。列名不同,因此失败。