MySQLのSQL文の書き方で質問です。


SELECT * FROM main LEFT JOIN sub USING(main_id) WHERE sub.user_id=1

main、subテーブルに共通するmain_idはユニークです。
subテーブルのuser_idはユニークではないので、同一値が入っている場合もあります。

やりたいこととしては、最初にsub.user_idにヒットする値を出して、
ヒットしたレコード”以外の”レコードを抽出し、main.idの数を抽出したいです。
どうしたらいいのでしょうか?

MtSQLは4.1.22を使用しています。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/02/28 13:01:49
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:Mook No.1

回答回数1314ベストアンサー獲得回数393

ポイント100pt

サブクエリを使用したやり方でご希望の結果が出ないでしょうか。

SELECT * FROM main WHERE main_id NOT IN (SELECT main_id FROM sub WHERE user_id = 1);

http://dev.mysql.com/doc/refman/4.1/ja/subqueries.html

id:kt26

まさにこれです!NOT INとすればサブクエリ側でヒットされた結果以外のデータを抽出することが出来ました。


ずっと悩んでいたのですが、こんなに短いコードで出来るとは。。どうもありがとうございました。

2008/02/28 13:00:50
id:pahoo No.2

回答回数5960ベストアンサー獲得回数633

ポイント5pt

subをJOINする理由が分からないのですが、もし――

subにある 'user_id=1' 以外のレコード数をカウントしたい

――ということであれば、下記のSQL文になるかと。

SELECT COUNT(*) FROM sub WHERE user_id!=1;

id:kt26

カウント(登録数)を取得するのではないです。

2008/02/28 13:01:11
  • id:taknt
    ヒットしたレコード以外の数ならヒットしたレコードの数だけ引けばいいのでは?

  • id:kt26
    すみません、「数」というかレコードです。ヒットしたレコード以外のmain.idを出力したいのです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません