Mysql

這些查詢會返回相同的結果嗎?

  • August 19, 2012

我有這個簡單的查詢:

SELECT 
   friend_id
FROM
   default_friend
WHERE
   user_id = 1

結果如下:

+-----------+
| friend_id |
+-----------+
|      2250 |
|      4901 |
|      7187 |
|      9337 |
|      9843 |
+-----------+

現在我有這個查詢太複雜了:

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

我的問題是:進入第二個查詢的 SELECT 會返回與第一個查詢返回的數據相同的數據嗎?意思是friend_id = 2250, 4901, 7187, 9337, 9843 還是我需要執行第一個並以程式方式拆分結果並建構第二個?另外我想知道哪種方式更合適!

不,您不必執行第一個查詢、獲取結果、動態建構第二個查詢然後執行它。

而且您也不需要這個複雜的第二個查詢。一個簡單的就足夠了:

SELECT 
   friend_id, user_id, approved
FROM
   default_friend
WHERE
   user_id = 1
 AND
   approved = 0 ;

而且您也不需要列表中的theuser_id和 the 。他們將在所有行中,不是嗎?approved``SELECT``1``0

所以,問題是。你為什麼不只保留原始的第一個查詢,只添加附加條件(approved = 0)?:

SELECT 
   friend_id
FROM
   default_friend
WHERE
   user_id = 1
 AND
   approved = 0 ;

引用自:https://dba.stackexchange.com/questions/22682