●data_table(1万件ほどのデータ)
id2 | name | ・・・ |
---|---|---|
1 | AA | ・・・ |
2 | BB | ・・・ |
3 | AB | ・・・ |
```CREATE文 | ||
CREATE TABLE data_table ( | ||
id2 int(5) unsigned NOT NULL, | ||
name varchar(100) NOT NULL DEFAULT '', | ||
PRIMARY KEY (id2 ) | ||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 | ||
``` | ||
●list_table(2万件ほどのデータ) | ||
id | name | number |
:-- | :--: | --: |
1 | AA | 101 |
2 | AA | 102 |
3 | BB | 101 |
4 | AB | 101 |
5 | AB | 101 |
6 | AB | 102 |
CREATE TABLE `list_table` ( `id` int(5) unsigned NOT NULL, `name` varchar(100) NOT NULL DEFAULT '', `number` int(3) NOT NULL DEFAULT '', PRIMARY KEY (`id`), KEY `name` (`name`,`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
id、id2はPRIMARYでAUTO_INCREMENTです。
●理想の結果
|name|id|number|・・・|id2|・・・|
|:--|:--:|--:|--:|--:|
|AA|1|101|・・・|1|・・・|
|AB|5|101|・・・|3|・・・|
data_tableとlist_tableをlist_table JOIN data_table USING (name)で結合したものから、
nameにAを含み、numberが101で、idが大きいデータを取得したいです。
過去の回答の「MySQLにおいて、更新日付が新しい行だけ取り出したい」を参照し、テーブルが1つのみの場合は分かったのですが、テーブルを結合する場合の書き方が分かりません。
SELECT t1.* FROM list_table AS t1 JOIN ( SELECT name, MAX(id) AS id FROM list_table WHERE name LIKE '%A%' AND number = '101' GROUP BY name ) AS t2 ON t1.name = t2.name AND t1.id = t2.id ORDER BY id
どのようなSQL文を書けば良いのかご教示いただけたら幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー