具有两个表的mysql连接限制

具有两个表的mysql连接限制,mysql,join,Mysql,Join,我有两张这样的桌子-> Categories ----------- id name --------- 1 --> a 2 --> b 3 --> c Messages ------------ id catid message --------------------------- 1 --> 1 --> aa 2

我有两张这样的桌子->

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
我想要这样的查询结果->

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;
但是没有任何程序上的顺序

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在
groupby
查询方面做得很差。

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仍然会抱怨。