
このジャンルでお願いします。
次のようなテーブルで
CREATE TABLE IF NOT EXISTS user (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(32) NOT NULL,
PRIMARY KEY(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO user (name) VALUES ('user1');
INSERT INTO user (name) VALUES ('user2');
INSERT INTO user (name) VALUES ('user3');
CREATE TABLE IF NOT EXISTS item (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(32) NOT NULL,
PRIMARY KEY(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO item (name) VALUES ('item1');
INSERT INTO item (name) VALUES ('item2');
INSERT INTO item (name) VALUES ('item3');
CREATE TABLE IF NOT EXISTS user_item (
id int(11) NOT NULL AUTO_INCREMENT,
user_id INT,
item_id INT,
PRIMARY KEY(id),
FOREIGN KEY (item_id) REFERENCES user(id) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (user_id) REFERENCES item(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO user_item (user_id, item_id) VALUES (1, 1);
INSERT INTO user_item (user_id, item_id) VALUES (2, 1);
INSERT INTO user_item (user_id, item_id) VALUES (3, 2);
INSERT INTO user_item (user_id, item_id) VALUES (1, 2);
INSERT INTO user_item (user_id, item_id) VALUES (1, 3);
INSERT INTO user_item (user_id, item_id) VALUES (3, 3);
user_itemテーブルでのselectで、
user_idが1で一番最初に挿入された行だけ
を取得したいのですが、どのようなSQL文にすれば良いのでしょうか?
この例なら
INSERT INTO user_item (user_id, item_id) VALUES (1, 1);←取得
INSERT INTO user_item (user_id, item_id) VALUES (2, 1);
INSERT INTO user_item (user_id, item_id) VALUES (3, 2);
INSERT INTO user_item (user_id, item_id) VALUES (1, 2);←user_id=3が最初に挿入されているので取得しない
INSERT INTO user_item (user_id, item_id) VALUES (1, 3);←取得
INSERT INTO user_item (user_id, item_id) VALUES (3, 3);
No.1ベストアンサー
- 回答日時:
よくあるランク付けの方法を応用すればよいでしょう。
まず、id順でitem_idごとにランクをつけます
SELECT id,user_id,item_id,(
SELECT COUNT(DISTINCT id) +1
FROM user_item AS t2
WHERE 1
AND t1.id > t2.id
AND t1.item_id=t2.item_id
) AS rank
FROM `user_item` AS t1;
これを元に、user_idが1、rankが1のものを抽出します。
なお上記rank項目はHAVING句に移動します
SELECT id,user_id,item_id
FROM `user_item` AS t1
WHERE user_id=1
HAVING (
SELECT COUNT(DISTINCT id) +1
FROM user_item as t2
WHERE 1
AND t1.id > t2.id
AND t1.item_id=t2.item_id
)=1;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
下記の問合せを行うクエリを、P...
-
LIMIT で条件を満たしているの...
-
エラー 1068 (42000): 複数の主...
-
SQLです!!教えてください。
-
select *, `人口(男)`AND`人口(...
-
SQLです!!教えてください。あ...
-
日本の全市区町村を人口密度が...
-
テーブル名が可変の場合のクエ...
-
#1062 - '0' は索引 'PRIMARY' ...
-
【投稿情報用データベース post...
-
SQLです!!教えてください。あ...
-
SQLです教えてくださいお願いし...
-
`picture` varchar(255) のコマ...
-
同一日に複数レコードがある場...
-
MAMP 99ドル約1.6万円 高い...
-
あってますか?SQL
-
WHERE `年月日` = '晴' OR `年...
-
SQLです教えてくださいお願いし...
-
SQLを作ったのですがうまくいき...
-
(初心者)MySQLやmaraDBで、crea...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
mysqlがインストールされている...
-
エラー 1068 (42000): 複数の主...
-
SQLでカラムを追加し、条件に合...
-
【初歩】ラジオボタンをつかっ...
-
テーブル名が可変の場合のクエ...
-
#1062 - '0' は索引 'PRIMARY' ...
-
データベースの接続に失敗して...
-
下記の問合せを行うクエリを、P...
-
SQLです。こんな感じですか?あ...
-
mysqlのupdate構文についての質...
-
下記の問合せを行うクエリを、P...
-
MySQLでcreateが使えない MySQL...
-
utf8bomとutf8mb4の違いがいま...
-
SQLです教えてくださいお願いし...
-
mysqlがインストールされている...
-
MySQL NULLだけをカウントして...
-
うまくいきません教えてくださ...
-
SQLで日付別のIDを生成するには
-
SQLです教えてくださいお願いし...
-
SQLで漢字名称を都道府県や市区...
おすすめ情報