首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何进行连接,其中最后一个表被限制为1或0?

如何进行连接,其中最后一个表被限制为1或0?
EN

Stack Overflow用户
提问于 2016-04-01 11:08:08
回答 2查看 31关注 0票数 0

我有两张桌子: chat_table和message_table。

我想要创建视图,它包含来自聊天台+消息的行和来自message_table的时间(如果有)。

代码语言:javascript
复制
CREATE VIEW chat_view AS  
SELECT 
    chat_table._id AS _id,
    chat_table.chat_id AS chat_id,
    chat_table.title AS title,
    chat_table.title_lower AS title_lower,
    chat_table.interlocutor_username AS interlocutor_username,
    chat_table.interlocutor_lastname AS interlocutor_lastname,
    chat_table.interlocutor_name AS interlocutor_name,
    chat_table.interlocutor_username_lower AS interlocutor_username_lower,
    chat_table.interlocutor_lastname_lower AS interlocutor_lastname_lower,
    chat_table.interlocutor_photo AS interlocutor_photo,
    chat_table.status AS status,
    chat_table.type AS type,
    chat_table.client_id AS client_id,
    message_table.message AS message,
    message_table.message_lower AS message_lower,
    message_table.time AS time  
FROM 
    chat_table 
INNER JOIN 
    message_table 
ON 
    chat_table.chat_id = message_table.chat_id 
INNER JOIN  
    (  SELECT  chat_id,
     MAX( time ) AS time  FROM message_table GROUP BY chat_id ) b 
ON 
    b.chat_id = message_table.chat_id AND message_table.time = b.time

当前,此状态创建了一个视图,该视图使用最后一条消息显示聊天,忽略没有消息的聊天。

不带短信的聊天很热吗?

编辑

关于左联接

代码语言:javascript
复制
CREATE VIEW chat_view5 AS  SELECT chat_table._id AS _id, chat_table.chat_id AS chat_id, chat_table.title AS title, chat_table.title_lower AS title_lower, chat_table.interlocutor_username AS interlocutor_username, chat_table.interlocutor_lastname AS interlocutor_lastname, chat_table.interlocutor_name AS interlocutor_name, chat_table.interlocutor_username_lower AS interlocutor_username_lower, chat_table.interlocutor_lastname_lower AS interlocutor_lastname_lower, chat_table.interlocutor_photo AS interlocutor_photo, chat_table.status AS status, chat_table.type AS type, chat_table.client_id AS client_id, message_table.message AS message, message_table.message_lower AS message_lower, message_table.time AS time  FROM chat_table LEFT JOIN message_table ON chat_table.chat_id = message_table.chat_id LEFT JOIN  (  SELECT  chat_id,  MAX( time ) AS time  FROM message_table GROUP BY chat_id ) b ON b.chat_id = message_table.chat_id AND message_table.time = b.time

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-14 07:39:37

我最后

代码语言:javascript
复制
CREATE VIEW chat_view AS  SELECT chat_table._id AS _id, chat_table.photo AS photo, chat_table.interlocutor_id AS interlocutor_id, chat_table.chat_id AS view_chat_id, chat_table.title AS title, chat_table.title_lower AS title_lower, chat_table.interlocutor_username AS interlocutor_username, chat_table.interlocutor_lastname AS interlocutor_lastname, chat_table.interlocutor_name AS interlocutor_name, chat_table.interlocutor_username_lower AS interlocutor_username_lower, chat_table.interlocutor_lastname_lower AS interlocutor_lastname_lower, chat_table.interlocutor_photo AS interlocutor_photo, chat_table.status AS status, chat_table.type AS type, chat_table.client_id AS client_id, message_table.message AS message, message_table.message_lower AS message_lower,  MAX ( message_table.time )  AS time  FROM chat_table LEFT JOIN message_table ON chat_table.chat_id = message_table.chat_id GROUP BY chat_table.chat_id
票数 0
EN

Stack Overflow用户

发布于 2016-04-01 11:14:18

您可以使用LEFT JOIN,但需要执行两次:

代码语言:javascript
复制
FROM chat_table LEFT JOIN 
     message_table 
     ON  chat_table.chat_id = message_table.chat_id LEFT JOIN  
     (SELECT  chat_id, MAX( time ) AS time
      FROM message_table
      GROUP BY chat_id
     ) b 
     ON b.chat_id = message_table.chat_id AND message_table.time = b.time

请注意,大多数数据库支持ANSI标准ROW_NUMBER()函数,它提供了获取最新消息的更简单的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36354798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档