1

我目前正在尝试编写一个涉及 5 个主表的查询,其中 2 个引用带有外键的第 3 个表,但彼此不相关......并且前 2 个表中的一个是询问。这是一个基本的概要。

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

我想要做的是为单个用户获取所有'def_map' 的列表。在每一行中,我也希望显示关联的 def_data 。所以行会像:

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

我可以弄清楚如何在结果中获取除 def_data.name 之外的所有信息,或除 instance.id 之外的所有信息......但无法弄清楚如何使用一个查询将所有信息放在一起。是否可以?我认为问题的一部分是我不知道是否有一个特殊的词来描述这种类型的查询,所以我知道要读什么。

我正在使用 DQL,但 SQL 中的示例同样有用。提前感谢您的帮助。

4

2 回答 2

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 回答
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 回答