1

問題を言葉で説明するのに苦労しています。そのため、私のテーブルの例は次のとおりです。

次のような結果テーブルが必要だとします。

user_id |data_a |data_b
1       |hello  |world

そして私はこのフォームのテーブル「データセット」からそれを抽出する必要があります

data_id |user_id|data_type  |data_data
1       |1      |data_a     |hello
2       |1      |data_c     |xxx
3       |2      |data_a     |xxx
4       |1      |data_b     |world

私は何かをします

SELECT user_id , data_a, data_b
FROM dataset
WHERE ( data_type = data_a OR data_type = data_b )
AND user_id = 1

AND a = ( SELECT data_data WHERE data_type = data_a )
AND b = ( SELECT data_data WHERE data_type = data_b )

ただし、機能していません。私はそれが間違っていることを知っていますが、それを行う方法とそれがどのように呼ばれるかわかりません。イボタノキのテーブルだと思いますが、よくわかりません。そのため、説明が非常に曖昧で、誰かが理解してくれることを願っています。

4

2 に答える 2

4

これは基本的にはですPIVOTが、MySQL にはPIVOT関数がないため、集計関数とCASEステートメントを使用して複製できます。したがって、SQLは次のようになります。

select user_id,
  max(case when data_type = 'data_a' then data_data end) data_a,
  max(case when data_type = 'data_b' then data_data end) data_b
from dataset
group by user_id

デモで SQL Fiddle を参照してください

結果:

| USER_ID | DATA_A | DATA_B |
-----------------------------
|       1 |  hello |  world |
|       2 |    xxx | (null) |
于 2012-11-19T19:15:20.587 に答える
1

You can use UNION which appends two results:

SELECT user_id, 'data_a', data_a FROM t1 
UNION 
SELECT user_id, 'data_b', data_b FROM t1;

Result

+---------+--------+--------+
| user_id | data_a | data_a |
+---------+--------+--------+
|       1 | data_a | hello  |
|       1 | data_b | world  |
+---------+--------+--------+

And for ordering by user_id:

SELECT * 
FROM  
    (
     (select user_id, 'data_a' as data_type, data_a as data_data from t1) 
     UNION 
     (select user_id, 'data_b' as data_type, data_b as data_data from t1)
    ) as data 
ORDER by user_id;

which results as

 +---------+-----------+-----------+
 | user_id | data_type | data_data |
 +---------+-----------+-----------+
 |       1 | data_a    | hello     |
 |       1 | data_b    | world     |
 |       2 | data_a    | bye       |
 |       2 | data_b    | people    |
 +---------+-----------+-----------+
于 2012-11-19T19:26:53.557 に答える