1

私は現在、5つのメインテーブルを含むクエリを作成しようとしています。そのうちの2つは、外部キーを使用して3番目を参照していますが、相互に関連していません...最初の2つのテーブルの1つが主な主題です。クエリ。これが基本的な概要です。

instance             user 
--------             ----
id                   id
name                 name
user_id


def                  def_map
---                  ------
id                   id
name                 instance_id
user_id              def_id


def_data
--------
id
name
def_id
user_id

私がやりたいのは、1人のユーザーのすべての'def_mapのリストを取得することです。各行に、関連するdef_dataも表示したいと思います。したがって、行は次のようになります。

instance.id, def.id, def.name, def_data.name, user.id

結果のdef_data.nameを除くすべての情報、またはinstance.idを除くすべての情報を取得する方法を理解することはできますが、1つのクエリを使用してすべてをまとめる方法を理解することはできません。出来ますか?問題の一部は、このタイプのクエリを説明する特別な単語があるかどうかわからないことだと思います。そのため、何を読むべきかがわかります。

私はDQLを使用していますが、SQLの例も同様に役立ちます。助けてくれてありがとう。

4

2 に答える 2

0
select I.id, D.id, D.name, DD.name, U.id
from user U inner join instance  I on I.user_id =  U.id
Inner join def D on D.user_id = U.id
inner join def_map DM on DM.def_id = D.id AND I.id = DM.instance_id
inner join def_data DD on DD.def_id = D.id AND U.id = DD.user_id

テストデータ:

USER                        
+----+-------------------------+
| id | name                    |
+----+-------------------------+
|  1 | Name1                   |
+----+-------------------------+                
Instance 

+----+------+---------+
| id | name | user_id |
+----+------+---------+
|  1 | I1   |       1 |
+----+------+---------+    
def_map    
+--------+-------------+--------+
|   id   | instance_id | def_id |
+--------+-------------+--------+
|      1 |           1 |  1     |
+--------+-------------+--------+

def
+--------------+------+
| id | name | user_id |
+--------------+------+
|  1 | df1  |      1  |
+--------------+------+

def_data
+--------+------+--------+---------+
|     id | name | def_id | user_id |
+--------+------+--------+---------+
|      1 | dd1  |      1 |       1 |
+--------+------+--------+---------+

結果

+-------------+--------+----------+---------------+---------+
| instance.id | def.id | def.name | def_data.name | user.id |
+-------------+--------+----------+---------------+---------+
|           1 |      1 | df1      | dd1           |       1 |
+-------------+--------+----------+---------------+---------+

視覚的表現

于 2011-08-15T15:20:34.760 に答える
0

2 つのクエリを使用して個別にデータをプルできる場合は、UNIONそれらを一緒にする必要があります。

    SELECT user.id, i.id, d.id, dd.name 
    FROM user u  
    INNER JOIN instance i ON u.id=i.user_id
    INNER JOIN def d ON dm.user_id = u.id 
    INNER JOIN def_data dd ON dd.def_id = d.id  
    UNION ALL  
    SELECT u.id, i.id AS instance_id, d.id, dd.name  
    FROM instance i 
    INNER JOIN user u ON u.id=i.user_id
    INNER JOIN defmap dm ON dm.instance_id=i.id  
    INNER JOIN def_data dd ON dd.def_id=dm.def_id
于 2011-08-15T14:29:28.703 に答える