mysql - Left Join 查询返回错误结果

标签 mysql sql select join laravel

我已经尝试了几个小时来使用 MySQL 进行左连接查询。
我有一个名为“at_friends”的表,用于存储用户之间的关系。

id  |  id_user1 |  id_user2  |  accepted
1   |  2        |  1         |  1
2   |  1        |  3         |  0

表示用户1和用户2是好友,用户1向用户3发送了好友请求。

这是我的表“at_users”

id  |  name
1   |  "John"   
2   |  "Mike"   
3   |  "Bob"    

我试过这个查询:

SELECT at_users.id, at_users.name
    FROM at_users 
    LEFT JOIN at_friends
         ON at_friends.id_user1 = at_users.id
         OR at_friends.id_user2 = at_users.id
         AND at_friends.accepted = 1
    WHERE id_user1 = 1 OR id_user2 = 1

“1”是当前用户(John)的唯一id


但是我得到了这些结果

id  |  name
1   |  "John"   
2   |  "Mike"   
1   |  "John"    

我想要的是用户 n°1 的已接受好友列表。
顺便说一下,我使用 Laravel,但我不知道是否有没有自定义 mysql 查询的方法。

最佳答案

试试这个:

SELECT u.id, u.name
FROM at_users u 
INNER JOIN (SELECT id_user2 AS friendID FROM at_friends WHERE id_user1 = 1 AND accepted = 1
            UNION 
            SELECT id_user1 AS friendID FROM at_friends WHERE id_user2 = 1 AND accepted = 1
           ) AS A ON u.id = A.friendID

关于mysql - Left Join 查询返回错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27667587/

相关文章:

mysql - 哪里可以找到 Magento 数据库

java - "correct"在 HSQLDB 2.0.0-rc8 中选择下一个序列值的方法

sql - SQLite中列的一部分上的索引

php - Form::model 绑定(bind) Laravel 与 <select multiple>

mysql - 用于查询结果的简单 Express 程序

php - 使用 mysql/php 从多个表中的多个连接返回多个结果

php - 为什么在 Laravel 中的 DB::select 中使用 DB::raw?

sql - 自加入的目的

sql - 在数据库外存储主键生成器的安全方法?

php - MYSQL 多表选择查询