如何使用两个不同的ID从不同的表中选择多个列?

土地与水

对于项目,我必须查找特定人员已发送的所有消息。所以,说我有这些表:

person_id | first_name | last_name 

信息

message_id | sender_id | receiver_id | message

sender_id和Receiver_id都引用person_id。我必须显示发件人的名字和姓氏,收件人的名字和姓氏以及消息。我特别在显示发件人姓名和收件人姓名时遇到麻烦。

我已经尝试过各种搜索来解决我的问题,但似乎没有任何效果或与我的问题真正相关。我已经看到一些解决方案使用UNION,但是我还没有在课堂上学到这一点。这是我到目前为止所拥有的:

SELECT p.first_name AS "Sender First Name",
    p.last_name AS "Sender Last Name",
    p.first_name AS "Reciever First Name",
    p.last_name AS "Reciever Last Name",
    m.message_id AS "Message ID",
    m.message AS "Message",
    m.send_datetime AS "Message Timestamp"
FROM message m, person p
WHERE m.sender_id = 1
AND m.sender_id = p.person_id;

这给了我:

+-------------------+------------------+---------------------+--------------------+------------+--------------------------------------------+---------------------+
| Sender First Name | Sender Last Name | Reciever First Name | Reciever Last Name | Message ID | Message                                    | Message Timestamp   |
+-------------------+------------------+---------------------+--------------------+------------+--------------------------------------------+---------------------+
| Michael           | Phelps           | Michael             | Phelps             |          1 | Congrats on winning the 800m Freestyle!    | 2016-12-25 09:00:00 |
| Michael           | Phelps           | Michael             | Phelps             |          4 | Thanks!  You're the greatest sprinter ever | 2016-12-25 09:04:00 |
| Michael           | Phelps           | Michael             | Phelps             |          5 | Good luck on your race                     | 2016-12-25 09:05:00 |
+-------------------+------------------+---------------------+--------------------+------------+--------------------------------------------+---------------------+

因此,发件人的名字是正确的,但收件人的名字是不正确的。如果我将最后一行更改为

AND m.receiver_id = p.person_id;

那么我会得到正确的接收方名称,但没有正确的发送方名称。

戈登·利诺夫

您需要两个联接。那就是JOIN

SELECT ps.first_name AS "Sender First Name",
       ps.last_name AS "Sender Last Name",
       pr.first_name AS "Receiver First Name",
       pr.last_name AS "Receiver Last Name",
       m.message_id AS "Message ID",
       m.message AS "Message",
       m.send_datetime AS "Message Timestamp"
FROM message m JOIN
     person ps
     ON m.sender_id = ps.person_id JOIN
     person pr
     ON m.receiver_id = pr.person_id
WHERE m.sender_id = 1;

笔记:

  • 如果你正在学习SQL,你应该被学习中使用逗号FROM条款。
  • 始终使用正确的显式JOIN语法。
  • 请注意,在这种情况下,您需要使用表别名,因为您在中有两次表FROM
  • 如果任一列都可以NULL,请使用LEFT JOIN代替JOIN

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从不共享联接的两个不同表中选择两个ID的所有可能组合

如何从不同条件的表中选择两个不同的值?

从不同的表中选择并比较两个Datetime列,没有任何关系

如何使用联接从两个不同的表中选择两列

SQL从两个不同的表中选择相同的列

SQL Server 2008,通过从不共享相同列信息的两个不同表中选择两个列来获取一个新表

在 MySQL 中,如何从两个不同的表中选择 *?

ggplot如何从两个不同的列中选择值?

如何从两个具有不同布局的表中选择列

MySQL从不同的表中选择ID

如何根据两个参数从两个表中选择不同的数据?

如何有条件地从不同表的两列中选择

如何基于多个列比较两个不同的表?

如何使用linq从两个表中选择列

MySql通过其他元素从两个不同的表中选择id然后id

如何仅使用一个查询从另一个表中选择两个不同的值?

如何在同一个表的两个不同列中选择匹配的记录?

从两个大表的联接中选择不同的值

从两个不同的表中选择值-sql

SQL 从两个表中选择不同的记录

从两个MySQL ID列表中选择不同的对

如何联接两个表,然后选择两个不同的列?

mysqli在一个表中选择不同的2列,并从两个表中选择不同的一列

SQL-如何从两个不同的表中选择数据?

如何从两个表中选择不同的值限制为一行

从两个不同的表中选择行,但使用php和MySQL按日期排序

SQL:使用CASE从两个不同的表中选择某些元素

SQL从不同表中选择多个位置的总和

如何在蜂巢中选择两个列中不同的蜂巢中的所有值