mysql - 不能将左连接与联合结合

标签 mysql sql join

我有3张 table

表学生

  • 姓名
  • 注册

表老师

  • 姓名
  • 注册

表格消息

  • 编号
  • 留言
  • 发件人身份
  • 接收ID
  • ts

我想得到与某个人联系的人的姓名和注册表。通过以下查询,我可以获取他们的 regid,但我无法添加 left join,因为我总是收到错误消息:

(SELECT sender_id AS contact FROM messages WHERE receiver_id = '...')

UNION

(SELECT receiver_id AS contact FROM messages WHERE sender_id = '...')

这就是我开始尝试做的事情:

SELECT teachers.name,
       teachers.regid
FROM   teachers
       LEFT JOIN ((SELECT sender_id AS contact
                   FROM   messages
                   WHERE  receiver_id = '...')
                  UNION DISTINCT
                  (SELECT receiver_id AS contact
                   FROM   messages
                   WHERE  sender_id = '...')) 
         ON t.contact = teachers.regid; 

最佳答案

您缺少连接内部查询的别名。 此外,要具有不同的查询联合,您应该只使用 UNION 运算符:

SELECT teachers.name, teachers.regid 
FROM teachers 
LEFT JOIN ( (SELECT sender_id AS contact 
             FROM   messages 
             WHERE  receiver_id = '...') 
             UNION 
            (SELECT receiver_id AS contact 
             FROM   messages 
             WHERE  sender_id = '...') ) t -- here!
ON t.contact = teachers.regid;

关于mysql - 不能将左连接与联合结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24712680/

相关文章:

php - 如何使这个实时验证与我的 sql PDO 一起工作

C# - SQL - 动态数组字段可能吗?

mysql - 我如何使用子选择或左连接来执行此删除查询

mysql - 有子查询的 MySQL INNER JOIN 查询有问题

mysql - SQL - 如何从同一列中选择多个表并连接多行?

javascript - 为什么这两个参数获取相同的值?

mysql - 如何从 .sh 脚本中截断表?

mysql - 这个子查询是如何工作的?

mysql - 在不破坏表中数据的情况下更改列的数据类型

mysql 表设计用于每日轮换顶级评分