mysql - 如何构建这个复杂的sql?

标签 mysql sql join

我有 2 张 table

T1

ID | Name | IMAGE
------------------------
1    Peter  pic_111.jpg
2    Mark   pic222.jpg

T2

ID1 | ID2 | message | timestamp

如果Peter向Mark发送消息,Peter是ID1,mark是ID2 如果 Mark 向 Peter 发送消息 Mark 是 ID1,peter ID2,

我想从 T1 中选择图像作为 ID1 和 ID2

从马克到某人或从某人到马克的所有消息 选择 ID1,ID2,来自 T2 的消息,其中 ID1=2 OR ID2=2 返回从标记发送或发送到标记的所有消息

如何在此查询中包含 ID1 和 ID2 的图片?

从 T1、T2 选择 ID1、ID2、消息、图像,其中 ID1=2 OR ID2=2 T1.ID=ID1 将是错误的,因为我需要 UID1 和 uid2 的图像...

因此可以显示结束标记消息或标记发送消息的人的图片...

最佳答案

您需要加入 T1 两次,才能获取 T2 上每个发件人各自的 ID

SELECT  a.*,
        b.Image as ID1IMAGE, -- alias is needed to avoid ambiguous columns
        c.Image as ID2Image
FROM    T2 a
        INNER JOIN T1 b
            ON a.ID1 = b.ID
        INNER JOIN T1 c
            ON a.ID2 = c.ID
WHERE   2 IN (a.ID1, a.ID2)   -- the condition can be done like this.

要进一步了解有关联接的更多知识,请访问以下链接:

关于mysql - 如何构建这个复杂的sql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15185504/

相关文章:

php - 如何使用 PHP 和 MySQL 对评论进行编号

sql - 我可以避免在这种递归查找场景中使用游标吗?

mysql - INSERT 查询时出现错误 1064 (42000)

php - 使用加入或别名获取具有相同报告电子邮件地址的用户的详细信息

php - MySQL 缺勤报告脚本

php - 使用 MySQLi 准备语句时无法获取行数和提取

java - Mysql 使用 hibernate 根据请求进行备份

MySQL 未知列 'password_last_changed'

sql - BigQuery JSON - 标量子查询生成多个元素

mysql - INNER JOIN 仅从第二个表中选择一行