【发布时间】:2015-12-15 15:35:54
【问题描述】:
我似乎无法弄清楚为什么这个查询只有在 john 低于 a 时才有效。
聊天表
**chatid** **username**
132 john
测试表
**chatid** **username**
132 john
132 a
查询
CREATE TEMPORARY TABLE tmp ( ids INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,id Int NOT NULL);
INSERT INTO tmp (id) VALUES (132);
SELECT i.id, IFNULL(COUNT(ta.chatid),0), count(l.chatid),IFNULL(x.username, '@')
FROM tmp i
inner JOIN chat ta ON ta.chatid = i.id
left JOIN test l ON ta.chatid = l.chatid
left JOIN chat x ON (x.chatid = l.chatid and x.username = l.username)
GROUP BY i.id
ORDER BY i.ids asc;
聊天到测试表是一对多的关系。查询仅根据测试表的顺序正常工作。例如,如果 john 低于 a 它将显示 john 是正确的。但是,如果 john 高于 a 则查询结果为不正确的空用户名(仍应显示 john)。
目标:我试图仅当 x.username 同时存在于聊天和测试表中时才显示他,否则显示 null(@)。我需要它在不弄乱 select 语句中的计数的情况下工作
【问题讨论】:
-
tsql 和 MySQL 都有???
-
@jarlh 语法上的唯一区别是临时表,它与所讨论的查询部分无关。所以我认为任何有 tsql 知识的人也可以提供帮助?
-
直到解决方案不是 tsql。你不在 msft 上