MySQLについて質問があります。
下記のような2テーブルがあります。
-----------------------------
・item
商品情報を格納。
・usersitem
ユーザーが所有している商品の個数を格納。
-----------------------------
この2つのテーブルから2つのリストを取り出したいと考えています。
【A】特定のユーザーが複数所有している商品の一覧
【B】特定のユーザーが所有していない商品の一覧
【A】は出来たのですが、【B】のSQL文がわかりません。
どうかご教授いただけませんでしょうか。
■テーブルを作成したSQL
-----------------------------
CREATE TABLE `test`.`item` (
`itemid` SERIAL NOT NULL DEFAULT NULL UNIQUE,
`itemname` VARCHAR( 256 )
);
CREATE TABLE `test`.`usersitem` (
`id` SERIAL NOT NULL DEFAULT NULL UNIQUE,
`userid` INT,
`itemid` INT,
`count` INT
);
-----------------------------
■【A】を実現したSQL
条件:userid「1」のユーザーがcount「2」以上の一覧。
-----------------------------
SELECT * FROM `item` LEFT JOIN `usersitem` ON (`item`.`itemid` = `usersitem`.`itemid`)
WHERE `usersitem`.`userid` = 1 AND `usersitem`.`count` >= 2
-----------------------------
■【B】を実現しようとしたが違っていたSQL
条件:userid「1」のユーザーがcount「0」以下、または登録されていない一覧。
-----------------------------
SELECT * FROM `item` LEFT JOIN `usersitem` ON (`item`.`itemid` = `usersitem`.`itemid`)
WHERE ( `usersitem`.`userid` = 1 AND `usersitem`.`count` <= 0 )
OR `usersitem`.`userid` != 1
-----------------------------
結果:
個数情報が登録されていない商品が表示されない。
違うユーザーの情報が表示されてしまう。
使用しているのは MySQL 5.5.29です。
よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
JOINで無いとダメですか?
SELECT * FROM `item`
WHERE NOT EXISTS
(
SELECT * FROM `usersitem`
WHERE `item`.`itemid` = `usersitem`.`itemid`)
)
この回答への補足
素早い反応ありがとうございます。
試してみたのですがエラーが出てしまいました。
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') LIMIT 0, 30' at line 6
想像なのですが、これは「誰も登録していないアイテム」を
取り出す構文なのでしょうか?
だとしたら申し訳ありません。自分の質問が説明不足でした。
具体的なデータと、希望する出力結果は下記のようになります。
■itemテーブル
itemid | item1
-------+---------
1 | item1
2 | item2
3 | item3
4 | item4
■usersitemテーブル
id | userid | itemid | count
1 | 1 | 1 | 1 ←1個以上なので対象外
2 | 1 | 2 | 2 ←1個以上なので対象外
3 | 1 | 3 | 0 ←【0個なので該当】
4 | 2 | 1 | 10 ←ユーザーIDが違うので対象外
5 | 2 | 4 | 1 ←ユーザーIDが違うので対象外
この他に、userid「1」は「item4」の登録がないので、それも該当。
■希望する結果
userid「1」は下記の商品を持っていない。
itemid | item1
-------+---------
3 | item3
4 | item4
No.2
- 回答日時:
SELECT *
FROM `item`
WHERE NOT EXISTS (
SELECT *
FROM `useritem`
WHERE `item`.`itemid` = `useritem`.`itemid`
AND `useritem`.`userid` = 1
AND `useritem`.`count` > 0
);
でどうでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- MySQL SHOW CREATE TABLE posts;これって何ですか? 3 2022/08/28 22:57
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- PHP PHP MySql ページング 2 2022/09/20 06:38
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2つのテーブルに共通するレコ...
-
Acccessで2つのテーブルから1...
-
テーブルに表示されているもの...
-
最新日のデータのみ抽出するク...
-
access vbaにてテンポラリーテ...
-
accessについて(超初心者です)
-
Accessでリストの並び順を変更...
-
Access2007を同時に複数名で使...
-
Microsoft Access 「Form」のボ...
-
Accessのリンクされたテーブル...
-
アクセス2000でのリンク先...
-
アクセスVBA現在開いている全て...
-
アクセスのリストボックス内の...
-
Accessのテーブルで、リンク?...
-
ACCESSで出欠リストを管理する
-
Accessで、複数行を、別...
-
アクセス・デザインビューのレ...
-
Accessでリンクテーブルからロ...
-
アクセスでフォームが消える(...
-
クエリで編集できるようにした...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2つのテーブルに共通するレコ...
-
最新日のデータのみ抽出するク...
-
テーブルに表示されているもの...
-
Acccessで2つのテーブルから1...
-
Accessでリストの並び順を変更...
-
Accessのリンクされたテーブル...
-
ACCESSユニオンクエリから新テ...
-
access vbaにてテンポラリーテ...
-
ACCESS テーブルを見比...
-
Accessのテーブルで、リンク?...
-
ACCESSでテーブルをコピーしよ...
-
アクセス 部分一致の抽出
-
accessについて(超初心者です)
-
Microsoft Access 「Form」のボ...
-
クエリで同一テーブルの複数回...
-
access2000・・テーブルをデー...
-
アクセス2016 チェックボックス...
-
Accessで使用しているリンクテ...
-
アクセス2000でのリンク先...
-
accessのテーブルを閉じたとき...
おすすめ情報