0

だから私は複雑な MySQL ステートメントが得意ではないので、皆さんが私を助けてくれることを願っています。

MainTable、AttrTable、NameTable、および ValueTable の 4 つのテーブルがあるとします。

MainTable は次のようになります。

| id | title | category |
.........................
| 1  | First | Cat1     |
.........................
| 2  | Second| Cat2     |
.........................
| 3  | Third | Cat3     |

AttrTable は次のようになります。

| id | mainId | nameId | valueId |
..................................
| 1  | 1      | 1      | 2       |
..................................
| 2  | 1      | 2      | 1       |
..................................
| 3  | 2      | 1      | 3       |
..................................
| 4  | 3      | 3      | 2       |
..................................
| 1  | 3      | 1      | 1       |

NameTable と ValueTable はそれぞれ次のようになります。

| id | title |           | id | title |
..............           ..............
| 1  | foo   |           | 1  | bar   |
..............           ..............
| 2  | john  |           | 2  | smith |
..............           ..............
| 3  | dink  |           | 3  | fink  |

そこで、MainTable の各行に関連付けられたすべてのデータを独自の行に結合するステートメントを書きたいと思います。例: 次のようなステートメントが必要です。

| 1 | First | Cat1 | foo | smith | john | bar |
| 2 | Second| Cat2 | foo | fink  |
etc...

それは可能ですか?私は次のようなものに落ち着くでしょう:

| 1 | First  | Cat1 | foo  | smith |
| 1 | First  | Cat1 | john | bar   |
| 2 | Second | Cat2 | foo  | fink  |
etc...

うまくいけば、これはすべて理にかなっています。助けてくれてありがとう。

4

2 に答える 2

3

これが欲しいだけのように聞こえます:

select m.id,
    m.title,
    m.category,
    n.title,
    v.title
from maintable m
left join attrtable a
    on m.id = a.mainid
left join nametable n
    on a.nameid = n.id
left join valuetable v
    on a.valueid = v.id

SQL Fiddle with Demoを参照してください

于 2012-09-11T19:49:19.083 に答える
0

クエリがチェックされていません! (そして微調整が必​​要かもしれません)

MainTable から m.*、n.title、v.title を選択 m a.mainId = m.id で AttrTable a に参加 n.id = a.nameId で NameTable n に参加 v.id = a.valueId で ValueTable v に参加

于 2012-09-11T19:47:19.660 に答える