0

これは私のクエリです:

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」には、「par_m」と「par_z」の 2 つの列があります。2 番目のテーブル「unos_golub」には、「ID」などがあります。ここで、「par_m」と「par_z」から値を取得し、「unos_golub」で一致させ、データを取得する必要があります。

たとえば、par_m=91 と par_z=92 を取得した場合、「unos_golub」の ID でそれらの番号を見つけ、91 と 92 の異なるデータを取得して表示する必要があります。おそらくUNION ALLが役立つと思いますが、機能していません。

ここに私のテーブルがあります

  1. 表:パロビ
  2. テーブル: unos_golub

表:パロビ

テーブル: unos_golub

4

1 に答える 1

2

このアプローチでは、それぞれの "M" 値と "Z" 値に対してすべてが 1 つの行に配置されます。「unos_golub」テーブルに TWICE を結合していることに注意してください。ただし、別のエイリアスを使用しています。これで、それぞれの「M」​​バージョンと「Z」バージョンを同時に指す 1 つの parovi レコードができました。そして、それぞれから列を引き出すことができるため、それぞれの起源を示す「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";

すべての行を表示したいというあなたのコメントによると、クエリは 1 つの小さな変更のみを必要とする必要があります。UNION を実行する場合、クエリは同じ列名を持つ必要があります。あなたはそれらの1つを次の方法で変更しました

unos_golub.broj_goluba as broj
vs
unos_golub.broj_goluba as broj2

これにより、クエリが失敗します。列名が異なるため、失敗します。

于 2013-02-08T18:01:58.120 に答える