0
╔════════╦═══════════╦═══════╗
║ MSG_ID ║ RANDOM_ID ║  MSG  ║
╠════════╬═══════════╬═══════╣
║      1 ║        22 ║ apple ║
║      2 ║        22 ║ bag   ║
║      3 ║         0 ║ cat   ║
║      4 ║         0 ║ dog   ║
║      5 ║         0 ║ egg   ║
║      6 ║        21 ║ fish  ║
║      7 ║        21 ║ hen   ║
║      8 ║        20 ║ glass ║
╚════════╩═══════════╩═══════╝

想要大量获取 3 条记录,以便拾取特定 random_id 的所有数据。

结果要求:

║ MSG_ID ║ RANDOM_ID ║  MSG  ║
╠════════╬═══════════╬═══════╣
║      1 ║        22 ║ apple ║
║      2 ║        22 ║ bag   ║
║      3 ║         0 ║ cat   ║

当前结果:

║ MSG_ID ║ RANDOM_ID ║  MSG  ║
╠════════╬═══════════╬═══════╣
║      1 ║        22 ║ apple ║
║      3 ║         0 ║ cat   ║
║      4 ║         0 ║ dog   ║
______________________________

使用的查询:

SELECT  ID,Random_ID, GROUP_CONCAT(message SEPARATOR ' ' ),FLAG,mobile,sender_number,SMStype  
FROM    messagemaster
WHERE   Random_ID > 0
GROUP   BY Random_ID
UNION
SELECT  ID,Random_ID, message,FLAG,mobile,sender_number,SMStype
FROM    messagemaster
WHERE   Random_ID = 0
order by random_id LIMIT 100;

我不想使用 group by 来获取记录。我想通过 random_ids 获取所有记录。例如,如果有一个 random_id 有 3 条记录并且查询有 limit =3 ,那么我想要所有要获取的那些 random_id 的数据。情况是,如果我获取限制为 100 的行,我不希望不选择结果集中存在的具有随机 id 的某些数据。例如,如果我选择记录限制为 3 ,则应选择random id=22所有记录。random id =22

4

1 回答 1

0

考虑以下...

 SELECT b.*
   FROM
      ( SELECT x.*, SUM(y.cnt)
          FROM 
             ( SELECT random_id,COUNT(*) cnt FROM messagemaster GROUP BY random_id) x
          JOIN
             ( SELECT random_id,COUNT(*) cnt FROM messagemaster GROUP BY random_id) y
            ON y.random_id >= x.random_id
         GROUP 
            BY x.random_id
        HAVING SUM(y.cnt) < 4
      ) a
   JOIN messagemaster b
     ON b.random_id = a.random_id;
于 2013-04-04T09:43:43.767 回答