我正在尝试连接两个表,并根据 where 约束以及 group-by-having 条件从这两个表中选择列。我遇到了一些我不理解的问题和行为。我正在使用sybase。下面是一个简单的例子
CREATE TABLE #test(
name varchar(4),
num int,
cat varchar(3)
)
CREATE TABLE #other(
name varchar(4),
label varchar(20)
)
Insert #test VALUES('a',2,'aa')
Insert #test VALUES ('b',2,'aa')
Insert #test VALUES ('c',3,'bb')
Insert #test VALUES ( 'a',3,'aa')
Insert #test VALUES ( 'd',4,'aa')
Insert #other VALUES('a','this label is a')
Insert #other VALUES ('b','this label is b')
Insert #other VALUES ('c','this label is c')
Insert #other VALUES ( 'd','this label is d')
SELECT t.name,t.num,o.label
FROM #other o inner JOIN #test t ON o.name=t.name
WHERE t.name='a'
GROUP BY t.name
HAVING t.num=MAX(t.num)
当我有GROUP BY
(标签列显然与不同的 t.name 相关)时,我会变得毫无意义。如果我删除GROUP BY
语句,查询的行为与我预期的一样,但是我被迫将其用作子查询然后应用
SELECT * FROM (subquery here) s GROUP BY s.name having s.num=MAX(s.num)
必须有更好的方法来做到这一点。对此行为的任何帮助和解释将不胜感激。
**我应该澄清一下。在我的实际查询中,我有类似 SELECT .... FROM (joined tables) WHERE name IN (long list of names), GROUP BY .....