最初のテーブルからの選択クエリの2つの列として2番目のテーブルの2つのエントリを作成するにはどうすればよいですか?

user2285831

最初のテーブル 'e_order_item'からのselectクエリの2つの列として、2つのレコード(1つの列のみから)である2番目のテーブル 'e_value'の結果を2つ表示したいと思います。また、パラメータ「collect_id」を使用して多くの注文アイテムを表示しているので、選択クエリに表示される注文アイテムIDを使用して、テーブル「e_value」の2つの値をそれぞれ表示したいと思います。

たとえば、私はこれをテーブルに置いています

+-------------------------------+
|         e_order_item          |
+-------------------------------+
| oi_id  oi_price oi_collect_id |
| 1         100         2       |
| 2         30          2       |
| 3         55          3       |
| 4         70          4       |
| 5         220         2       |
| 6         300         2       |
+-------------------------------+

+----------------------------+
|          e_value           |
+----------------------------+
| v_id   v_value     v_oi_id |
| 1        name1         1   |
| 2        surname1      1   |
| 3        name2         2   |
| 4        surname2      2   |
| 5        name3         5   |
| 6        surname3      5   |
+----------------------------+

collect_id = 2のorder_itemsを選択したいのですが、結果は次のようになります

+--------------------------------------------------+
|                                                  |
+--------------------------------------------------+
|                Result                            |
| oi_id  oi_price oi_collect_id   name    surname  |
| 1         100         2         name1   surname1 |
| 2         30          2         name2   surname2 |
| 5         220         2         name3   surname3 |
| 6         300         2         null    null     |
|                                                  |
+--------------------------------------------------+
1000111

クエリは次のとおりです。

SELECT
    t.oi_id,
    t.oi_price,
    t.oi_collect_id,
    LEFT (
        GROUP_CONCAT(t.v_value),
        IF (
                LOCATE(',',GROUP_CONCAT(t.v_value)) = 0,
                LENGTH(GROUP_CONCAT(t.v_value)),
                LOCATE(',', GROUP_CONCAT(t.v_value)) - 1
            )
    ) 'Name',
    RIGHT (
        GROUP_CONCAT(t.v_value),
        LENGTH(GROUP_CONCAT(t.v_value)) -
    IF (
            LOCATE(',',GROUP_CONCAT(t.v_value)) = 0,
            LENGTH(GROUP_CONCAT(t.v_value)),
            LOCATE(',',GROUP_CONCAT(t.v_value))
        )
    ) Surname
FROM
    (
        SELECT
            *
        FROM e_order_item
        LEFT JOIN e_value ON e_order_item.oi_id = e_value.v_oi_id
        WHERE   e_order_item.oi_collect_id = 2
        ORDER BY    oi_id, v_id
    ) t
GROUP BY t.oi_id;

デモはこちら

注意:

次の例は、コンマ区切りの文字列から最初の文字列と2番目の文字列を取得する方法を示しています。

SET @str := 'A,BCDEFGHIJKL';
SELECT 
LEFT(@str,IF(LOCATE(',',@str) = 0, LENGTH(@str),LOCATE(',',@str)-1)) AS StringBeforeComma,
RIGHT(@str,LENGTH(@str)-IF(LOCATE(',',@str)=0,LENGTH(@str),LOCATE(',',@str))) AS StringAfterComma

結果:

StringBeforeComma      StringAfterComma

    A                    BCDEFGHIJKL

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ