mysql 合并多个连接

标签 mysql sql join

几天来我一直在努力改变我的查询,但我就是无法得到我想要的结果。 我有点希望有人能帮助我改变我的查询。

现在有以下查询:

SELECT 
    t.tId,
    t.tName,
    a.aId,
    a.aName,
    u.uId,
    u.uName
FROM
    tableT t
    LEFT JOIN t_a ta USING (tId)
    LEFT JOIN t_u tu USING (tId)
    LEFT JOIN tableA a ON a.aId = ta.aId
    LEFT JOIN tableU u ON u.uId = tu.uId

它返回 tableT 中与 tableA 和 tableU 中匹配的行。 现在我必须更改它以获得同时返回 tableA 中所有行的结果。

如果我没记错的话,我想要与 tableA 进行 FULL OUTER JOIN,并与 tableU 进行 LEFT JOIN。 (我知道 FULL OUTER JOIN 不存在,这让我更加困惑)

表 t_a 包含多对多关系,表 t_u 包含来自 tableT 的多对一关系。

简而言之,当我搜索一个值时,我希望返回以下行: 任何包含该值的 tableT 行以及 tableU 中的匹配行和 tableA 中的匹配行。 任何其他(不匹配的)表包含该值的行。 tableU 中没有其他(不匹配的)行。

之前需要的值:

tableT   tableA    tableU
ANY      ANY       ANY
ANY      NULL      ANY
ANY      NULL      NULL

现在需要的值:

  tableT      tableA        tableU
  ANY          ANY           ANY
  ANY          NULL          ANY
  ANY          NULL          NULL
**NULL**     **ANY**       **NULL**

当我在错误的情况下寻求帮助时,我深表歉意。 预先感谢您的帮助。

这里有一个 fiddle :http://sqlfiddle.com/#!2/f6301/11

它返回除包含以下内容的行之外的所有所需行:

TID    TNAME    AID    ANAME    UID    UNAME
NULL   NULL     4      aName4   NULL   NULL

最佳答案

table t_a contains many to many relations and table t_u contains many to one relations from tableT's respective.

但是t_a和t_u之间没有关系。然而,您正试图让它们彼此共享元组空间。

像这样看。 TableT 是一个父类(super class)。表 t_a 扩展了 TableT 以形成自己的类。表 t_u 还扩展了 TableT 以形成自己的类。因此,虽然 t_a 和 t_u 都扩展了 TableT,但它们形成了真正彼此独立的单独类(实体)。确实没有办法将它们硬塞到一个实体表达式(元组)中。

换句话说,您正在尝试混合苹果和橙子,而关系数据库不能很好地处理水果沙拉。

关于mysql 合并多个连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23870131/

相关文章:

mysql - 选择 MySQL vs 寻找 MongoDB

SQL:JOIN 语法变体

mysql - 在 Rails ActiveRecord 中,为什么我的 JOINed 表中的列之一抛出错误消息?

MYSQL - 根据其他ID计算值

mysql - 如果在另一个表上匹配,则排除一个表中的行 - MySql

sql - 使用 EncryptByPassPhrase 创建它们后,DECRYPTBYPASSPHRASE 不起作用

sql - 楼层时间戳精确到秒

mysql - 使用 JOIN 条件限制 SQL JOIN

Mysql 使用嵌套 Select 进行连接

php - 当先前调用另一个模型时,如何将配置传递给模型?