
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1069795
で質問した続きです。
うっかり詳細のテストをしてないのに締め切ってしまいました。
テーブルA 「member」
| id | name |
テーブルB 「item」
| id | name |
テーブルC 「item_check」
| member_id | item_id |
というテーブルがあります。
テーブルAはメンバーで一人一つのデータが入っています。
テーブルBはメンバーが持つであろうアイテムのマスタです。
テーブルCはメンバーがどのアイテムを持っているかを示しているテーブルです。
テーブルCに関しては同じメンバーでも複数のアイテムを持つこともあるので複数のデータが入る場合もあります。
で、やろうとしているのは、
「アイテムA と アイテムBを持っているメンバー」
という検索を行いたいのです。
select distinct a.id, a.name from member as a,item as b,item_check as c
where a.id = c.member_id and c.item_id = b.id
and (c.item_id = '2' or c.item_id = '3')
select member.*,item.name from member, item, item_check
where member.id=item_check.member_id and item.id=item_check.item_id and item.id in (1, 3) group by member.id
で or 検索はできますが、
and 検索をすると 「Empty set」となってしまいます。
select distinct a.id, a.name from member as a,item as b,item_check as c
where a.id = c.member_id and c.item_id = b.id
and (c.item_id = '2' and c.item_id = '3')
なにかいい手はないでしょうか。
No.2ベストアンサー
- 回答日時:
こんにちは。
ごめんなさい、意味がわかりました・・・。
>>アイテムA と アイテムBを持っているメンバー
両方持ってるメンバーだけという事ですね?
まずはitem_checkのテーブルからmember_idだけを抽出します。
SELECT member_id, count(member_id)
FROM item_check
WHERE item_id = 'A' OR item_id = 'B'
GROUP BY member_id
HAVING count(member_id) > 1 --ここの数値は条件のアイテム数と合わせてね。
これでとりあえずmember_idが取れるので、
後は副問い合わせとかで引っ付けてください。
(^^ゞ
この回答への補足
質問文が分かりづらいようでした。すいません。
Mysql のバージョンが 4.0.21 の為副問い合わせが使えません。
たしか 4.1 からでしたよね。
ベータ版なのであえて避けて正式版の方を使っています。
そうなるとやっぱりクエリを分けなくてはいけないのですか?
一回で出るに越したことはありませんが。
(というか早いほうがいいのですが)
テストして検討をしてみます。
SELECT * FROM item_check,member,item WHERE member.id = member_id and item.id = item_check.item_id and (item_id = '2' OR item_id = '3') GROUP BY member.id HAVING count(member_id) >= 2
テストした結果、これで一発で出るようです。
ありがとうございました。
まだ知らないことってたくさんあるんですね。
MysqlのWEBマニュアルを見ても分かりづらいので・・・
周りにスペシャリストがいないので助かりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- その他(料理・グルメ) 「金ちゃんヌードル」どれが好き? 3 2022/06/18 21:39
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Oracle SQL update方法 2 2022/06/22 14:07
- Ruby No route matches [GET] "/posts/5/destroy" 1 2022/03/24 13:00
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
MySQLでページ毎にログを取りたい
-
グループ化したテーブルと他の...
-
MySQL UPDATE SETが失敗なのに...
-
エクセルの関数について教えて...
-
SQLサーバから、項目の属性(型...
-
MySQLコマンドライン操作
-
inner joinをすると数がおかし...
-
DEFAULT が設定できないのです
-
複数のカラムの中から最大値を...
-
SQL Left Join で重複を排除す...
-
sqlで、600行あるテーブルを100...
-
SQLで最大値を検索条件にする場...
-
ストアドのエラーについて
-
SQLにて特定の文字を除いた検索...
-
入力値と外部キーをINSERTするには
-
同一テーブルの同一フィールド...
-
VIEWの元のテーブルのindexって...
-
結合するデータがないとき!?
-
テーブル結合の後に多重ソート
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
select文のwhere句に配列を入れ...
-
VIEWの元のテーブルのindexって...
-
エラー 1068 (42000): 複数の主...
-
SQLにて特定の文字を除いた検索...
-
【Transact-sql】 execの結果を...
-
マイクラPC版のコマンドで効率...
-
SQL Left Join で重複を排除す...
-
sqlで、600行あるテーブルを100...
-
複数テーブルのGROUP BY の使い...
-
WordpressのContact form 7でzi...
-
クエリ表示と、ADOで抽出したレ...
-
SQLサーバから、項目の属性(型...
-
selectした大量データをinsert...
-
Access パラメータクエリをcsv...
-
副問合せの書き方について
-
inner joinをすると数がおかし...
-
insertを高速化させたい
-
[MySQL] 3つのテーブルの結合で...
おすすめ情報