【问题标题】:mysql join limit with two tables两个表的mysql连接限制
【发布时间】:2009-08-25 23:51:53
【问题描述】:

我有两张这样的表 ->

Categories
-----------
id      name
---------
1 -->      a
2    -->   b
3    -->   c



    Messages
    ------------
    id        catid    message
    ---------------------------
    1   -->      1   -->     aa
    2      -->   1   -->     bb
    3        --> 1   -->     cc
    4        --> 2   -->     dd
    5        --> 3    -->    ee
    6        --> 3    -->    ff

    i want to join the tables for get FIRST message from messages table,

我想要这样的查询结果 ->

-------------------------------
id         name       message
1          a          aa
2          b          dd
3          c          ee

我找到了一个代码

select * from categories c, items i
    -> where i.categoryid = c.id
    -> group by c.id;

但没有任何 ORDER BY 过程

【问题讨论】:

    标签: mysql join


    【解决方案1】:
    SELECT c.*, i.*
    FROM categories c
    JOIN items i ON (i.categoryid = c.id)
    LEFT OUTER JOIN items i2 ON (i2.categoryid = c.id 
      AND (i.message > i2.message OR i.message = i2.message AND i.id > i2.id))
    WHERE i2.categoryid IS NULL
    ORDER BY c.id;
    

    这往往在 MySQL 上表现更好,因为 MySQL 在 GROUP BY 查询中表现不佳。

    【讨论】:

      【解决方案2】:

      如果您按第一个分组,MySql 将始终返回第二个表中的第一条记录。

      SELECT a.id, a.name, b.message FROM Categories a, Messages b WHERE b.catid = a.id GROUP BY a.id ORDER BY a.id
      

      【讨论】:

      • 这不是 MySQL 的记录策略,它恰好在当前版本中是正确的。我不建议在所有存储引擎或未来版本中依赖这一点。
      • 或者,事实上,通过某些类型的数据库导出/导入。如果您真的不在乎是否收到消息 aa、bb 或 cc,则可以使用此查询。但是符合 ANSI 的 DBMS 仍然会抱怨。
      猜你喜欢
      • 2011-04-27
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多