这些查询会返回相同的结果吗?

Rey*_*rPM 5 mysql performance query mysql-5.5 query-performance

我有这个简单的查询:

SELECT 
    friend_id
FROM
    default_friend
WHERE
    user_id = 1
Run Code Online (Sandbox Code Playgroud)

结果如下:

+-----------+
| friend_id |
+-----------+
|      2250 |
|      4901 |
|      7187 |
|      9337 |
|      9843 |
+-----------+
Run Code Online (Sandbox Code Playgroud)

现在我有这个查询也有点复杂:

SELECT 
    friend_id, user_id, approved
FROM
    default_friend
WHERE
    user_id = 1
        AND (friend_id IN (SELECT 
            friend_id
        FROM
            default_friend
        WHERE
            user_id = 1))
        AND approved = 0
Run Code Online (Sandbox Code Playgroud)

我的问题是:进入第二个查询的 SELECT 会返回与第一个查询返回的数据相同的数据吗?意思是friend_id = 2250, 4901, 7187, 9337, 9843 还是我需要运行第一个并以编程方式拆分结果并构建第二个?我也想知道哪种方式更合适!

ype*_*eᵀᴹ 6

不,您不必运行第一个查询、获取结果、动态构建第二个查询然后运行它。

而且您也不需要这个复杂的第二个查询。一个简单的就足够了:

SELECT 
    friend_id, user_id, approved
FROM
    default_friend
WHERE
    user_id = 1
  AND
    approved = 0 ;
Run Code Online (Sandbox Code Playgroud)

而你并不真正需要的user_idapprovedSELECT列表中无论是。他们将要10所有行,不是吗?

所以,问题是。为什么不保留原始的第一个查询,只添加附加条件 ( approved = 0) ?:

SELECT 
    friend_id
FROM
    default_friend
WHERE
    user_id = 1
  AND
    approved = 0 ;
Run Code Online (Sandbox Code Playgroud)