0

いくつかのサブクエリを必要とする mySQL の多数のテーブルからデータを返すクエリを実行しようとしていますが、1 回のパスで達成しようとしていることが可能かどうかはわかりません。

私は例として以下を持っています(私はこれがうまくいかないことを知っていますが、あなたにアイデアを与えます)

SELECT field_id, field_1, 
  (SELECT subfield_1 FROM tableb WHERE subfield_id = field_3) AS field_a, 
  (SELECT subfield_1 FROM tableb WHERE subfield_id = field_4) as field_b 
FROM tablea WHERE field_2 = 123

これにより、プライマリ テーブルの 2 つの異なる列に基づいて、2 番目のテーブルから 2 つのエントリが取得されます。

tablea
----------
field_id, bigint
field_1, varchar(50)
field_2, int
field_3, bigint
field_4, bigint

tableb
----------
subfield_id, bigint
subfield_1, varchar(50)
4

3 に答える 3

0

サブクエリが1つの行を返す場合にのみ、達成しようとしていることは可能です。たとえばここ

    (SELECT subfield_1 FROM tableb     WHERE subfield_id = field_3) 

フィールド 3 は tableb の主キーにする必要があります

于 2013-10-04T09:03:23.133 に答える
0

sを使用JOINします。field_3field_4NULL使用できるかどうかに応じてLEFT JOIN(以下の例のように) またはINNER JOIN

SELECT field_id, field_1, b1.subfield_1 field_a, b2.subfield_1 field_b
  FROM tablea a LEFT JOIN tableb b1 
    ON a.field_3 = b1.subfield_id LEFT JOIN tableb b2
    ON a.field_4 = b2.subfield_id
 WHERE a.field_2 = 123

出力例:

| | FIELD_ID | FIELD_1 | FIELD_A | FIELD_B |
|---------|---------|-----------|-----------|
| | 1 | 11 | サブ値1 | サブ値5 |
| | 2 | 22 | サブ値4 | サブ値2 |
| | 3 | 33 | サブ値2 | (ヌル) |      

注:field_3およびにインデックスがあることを確認してください。field_4

これがSQLFiddleのデモです

于 2013-10-04T09:04:04.950 に答える