sql >> データベース >  >> RDS >> Mysql

テーブル名が別のテーブルのフィールドであるMySQL結合テーブル

    一度に1行ではなく、すべての行(一括出力)が必要な場合は、以下を高速にする必要があります。また、すべての行の出力にはすべての列が含まれます。

    以下をtables.obj_mobilesのフィールドと考えてみましょう-ID| M1 | M2obj_tablets-ID | T1 | T2obj_computers-ID | C1 | C2objects-ID |タイプ|名前|など、

    Select objects.*, typestable.*
    from (
        select ID as oID, "mobile" as otype, M1, M2, NULL T1, NULL T2, NULL C1, NULL C2 from obj_mobiles 
        union all
        select ID as oID, "tablet" as otype, NULL, NULL, T1, T2, NULL, NULL from obj_tablets 
        union all
        select ID as oID, "computer" as otype, NULL, NULL, NULL, NULL, C1, C2 from obj_computers) as typestable 
            left join objects on typestable.oID = objects.ID and typestable.otype = objects.type;
    
    +------+--------------------+----------+------+----------+------+------+------+------+------+------+
    | ID   | name               | type     | ID   | type     | M1   | M2   | T1   | T2   | C1   | C2   |
    +------+--------------------+----------+------+----------+------+------+------+------+------+------+
    |    1 | Samsung Galaxy s2  | mobile   |    1 | mobile   |    1 | Thin | NULL | NULL | NULL | NULL |
    |    2 | Samsung Galaxy Tab | tablet   |    2 | tablet   | NULL | NULL | 0.98 |   10 | NULL | NULL |
    |    3 | Dell Inspiron      | computer |    3 | computer | NULL | NULL | NULL | NULL | 4.98 | 1000 |
    +------+--------------------+----------+------+----------+------+------+------+------+------+------+
    

    テーブルは以下のように作成されます。

    mysql> create table objects (ID int, name varchar(50), type varchar (15));
    Query OK, 0 rows affected (0.05 sec)
    mysql> insert into objects values (1, "Samsung Galaxy s2", "mobile"), (2, "Samsung Galaxy Tab", "tablet"), (3, "Dell Inspiron", "computer");
    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
    
    mysql> create table obj_mobiles (ID int, M1 int, M2 varchar(10));
    Query OK, 0 rows affected (0.03 sec)
    mysql> insert into obj_mobiles values (1, 0.98, "Thin");
    Query OK, 1 row affected (0.00 sec)
    
    
    mysql> create table obj_tablets (ID int, T1 float, T2 int(10));
    Query OK, 0 rows affected (0.03 sec)
    mysql> insert into obj_tablets values (2, 0.98, 10);
    Query OK, 1 row affected (0.00 sec)
    
    
    mysql> create table obj_computers (ID int, C1 float, C2 int(10));
    Query OK, 0 rows affected (0.03 sec)
    insert into obj_computers values (3, 4.98, 1000);
    

    また、列のデータ型が元の列と同じであることを確認するために、結果がテーブルに保存され、データ型が以下でチェックされます。

    create table temp_result as
    Select objects.*, typestable.*
    from (
        select ID as oID, "mobile" as otype, M1, M2, NULL T1, NULL T2, NULL C1, NULL C2 from obj_mobiles 
        union all
        select ID as oID, "tablet" as otype, NULL, NULL, T1, T2, NULL, NULL from obj_tablets 
        union all
        select ID as oID, "computer" as otype, NULL, NULL, NULL, NULL, C1, C2 from obj_computers) as typestable 
            left join objects on typestable.oID = objects.ID and typestable.otype = objects.type;
    
    mysql> desc temp_result;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | ID    | int(11)     | YES  |     | NULL    |       |
    | name  | varchar(50) | YES  |     | NULL    |       |
    | type  | varchar(15) | YES  |     | NULL    |       |
    | oID   | int(11)     | YES  |     | NULL    |       |
    | otype | varchar(8)  | NO   |     |         |       |
    | M1    | int(11)     | YES  |     | NULL    |       |
    | M2    | varchar(10) | YES  |     | NULL    |       |
    | T1    | float       | YES  |     | NULL    |       |
    | T2    | int(11)     | YES  |     | NULL    |       |
    | C1    | float       | YES  |     | NULL    |       |
    | C2    | int(11)     | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    11 rows in set (0.00 sec)
    


    1. ドライバクラスcom.mysql.jdbc.Driverのロードに失敗しました

    2. さまざまな国、州、地理的な場所の動的ドロップダウンリスト?

    3. MySQLロードデータファイル

    4. Djangoの主キーをそのテーブルに固有の別の整数に置き換える方法