2 つのテーブルを結合し、where 制約と group-by-having 条件に基づいて両方から列を選択しようとしています。理解できない問題や動作が発生しています。私はサイベースを使用しています。以下の簡単な例
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 (結合されたテーブル) WHERE name IN (名前の長いリスト)、GROUP BY ..... のようなものがあります。