1

テーブルAとテーブルBがある場合。それらの構造は次のとおりです。

A:

id

1
2

B:

col_1    col_2

m         q
n         w

SQLで以下のCの結果を取得するにはどうすればよいですか?

id     col_1   col_2    col_1  col_2 

 1       m     q        n      w
 2       m     q        n      w

表Bの各データについて、それらは表AのIDに関連付けられています。2つの表を表Cに連結した後、表CのID(表AのIDに属する)が変更されると、表Cの対応する行が変更されます。変化する。したがって、ファイナルテーブルCを取得するには、テーブルC(col_1、col_2、col_1 col_2)の各データを取得するための計算が必要です。

4

2 に答える 2

1

私が理解している限り、テーブル B からすべての行を取得し、テーブル A の id に列として関連付けたいと考えています。

クエリだけでは不可能だと思いますが(手順で解決できるかどうかはわかりません)、役立つ可能性のあるアプローチがあります(MySQLでテストしました)。

SELECT 
  `a`.`id`, 
  GROUP_CONCAT(`b`.`key`) AS `keys`, 
  GROUP_CONCAT(`b`.`value`) AS `values` 
FROM `a`, `b` 
GROUP BY `a`.`id` ASC;

その結果、次のようになります。

---- ------ --------
| | ID | キー | 値 |
 ---- ------ --------
| | 1 | 分、年 | 3,4 |
| | 2 | 分、年 | 3,4 |
 ---- ------ --------

列キーの最初のキーと列値の最初の値は、テーブル b の最初の行を参照します。2 番目は 2 番目の行を参照し、以降も同様です。このように、区切り文字「,」でサーバー側のコードを分割するだけで済みます。

Postgres から MySQL GROUP_CONCAT に一致するコマンドを検索したところ、STRING_AGGが同じ仕事をしている可能性があることがわかりました。

それが役に立てば幸い!

于 2013-03-20T15:59:33.683 に答える
0

Bに表示できる個別の値の数を事前に知っている限りkey(そしてあまり多くない場合)、これは機能するはずです。

select A.id, Once.key k1, Once.value v1, Twice.key k2, Twice.value v2
from A,(select * from B where B.key='m') Once,
(select * from B where B.key='n') Twice;

編集:これは上記のクエリで得られた結果です:

| ID | K1 | V1 | K2 | V2 |
--------------------------
|  1 |  m |  3 |  n |  4 |
|  2 |  m |  3 |  n |  4 |
于 2013-03-20T15:50:13.210 に答える