mysql:4295
From: fuji <fuji <fujiyama@xxxxxxxxxx>>
Date: Mon, 10 Sep 2001 22:41:12 +0900
Subject: [mysql 04295] Re: 2テーブル間で不一致のデータを抽出したい!
fujiyamaです。 何か他の方がレスをつけてくださったようですが折角書いたので、、、 > ①SELECT DISTINCT user.userid > FROM table1 LEFT JOIN table2 ON table1.userid=table2.userid,user > WHERE table1.userid <> table2.userid > > ②SELECT DISTINCT user.userid > FROM table1 LEFT JOIN table2 ON table1.userid=table2.userid,user > WHERE table2.userid is null > > ①のtable1.userid <> table2.userid > は、「table1でtable2に入っていないuseridを抽出したい。」 > というつもりでこう書きました。 > > ①②の違いは、日本語で書くとどういう解釈なんでしょうか? > > 「table1でtable2に入っていないuseridを抽出したい。」 > の場合、②が正しい書き方ってのでLEFT JOINの理解がますます難しくなってしまいました。。 仕様では、 「もし、LEFT JOIN の ON や USING において右側のテーブルにマッチするレコー ドが無かった場合、全てのフィールドがNULLである1つのレコードが、右側のテー ブルとして使用されます。」 とあります。 ちょっとぶっちゃけた表現しますが、 JOIN構文でテーブルをくっつけます。 LEFT JOINの場合、左側のテーブル(ここではtable1)に右側のテーブル (table2)どうやってくっつけるかの条件をON句で指定します。 この場合は、ON条件で同じ値を持ったフィールド同士を結びつけています。 この時、table1のフィールドにある値が、右側のテーブル(table2)に無い場合 も当然考えられます。table1に加えるデータがない状態です。 で、値があるところはフィールド有り、ないところだけフィールドなしなんてい うことはDB上困るので、何かフィールドに値を入れる必要があります。 仕様ではNULL値をフィールドに入れることにしました。 この辺は言葉で読んでも多分よく分からないので、実際にSQLつくって出力させ てみるといいと思います。 例) table1.userid a b c table2.userid a b SELECT table1.userid as t1 , table2.userid as t2 FROM table1 LEFT JOIN table2 ON table1.userid=table2.userid; SELECT table1.userid as t1 , table2.userid as t2 FROM table1 JOIN table2; 実行例 LEFT JOIN t1 t2 ___________ a a b b c NULL JOIN t1 t2 ___________ a a a b b a b b c a c b で、先の例だと出来上がったtable2.useridでNULLのものができるわけです。 そしてNULLの計算についてですが、これは班石さんの書いているように 「NULL は他の全ての値(たとえ NULL でも)と比較した時に、常に偽になる値で す」 とあり、つまりNULLは比較できません。 table2.useridはNULLが入っているので、本来「<>」で比較はできないはずと いうことです。 比較できるんだったら(1)でもいいと思いますよ。 #○1=①は機種依存文字だそうで、先日注意しなさいと言われました(^^; > >> *関係ないですけど、php-4.0.6のmail()関数が使えなくてはまってます(;_:) > 試しにPROG_SENDMAIL=/var/qmail/bin/qmail-inject > をexportしてから、PHPをコンパイルしたら > 今日、上手くいきました(^^) こちらはめでたしめでたし。 --お世話になっています fuji <fujiyama@xxxxxxxxxx>
4270 2001-09-03 16:18 ["yasushi fujiwara" <] 2テーブル間で不一致のデータを抽出したい! 4271 2001-09-03 16:54 ┣[<endo_t@xxxxxxxxxx> ] 4272 2001-09-03 17:52 ┣[madara <madara@xxxxx] 4273 2001-09-03 19:39 ┃┗["yasushi fujiwara" <] 4274 2001-09-03 19:54 ┃ ┣[fuji <fujiyama@xxxxx] 4277 2001-09-03 21:49 ┃ ┗[<endo_t@xxxxxxxxxx> ] 4278 2001-09-03 23:02 ┃ ┗["yasushi fujiwara" <] 4289 2001-09-09 08:15 ┃ ┗[<moeru@xxxxxxxxxx> ] 4290 2001-09-10 13:08 ┃ ┣[fuji <fujiyama@xxxxx] 4292 2001-09-10 21:23 ┃ ┃┗[<moeru@xxxxxxxxxx> ] 4293 2001-09-10 22:07 ┃ ┃ ┣[<endo_t@xxxxxxxxxx> ] 4294 2001-09-10 22:19 ┃ ┃ ┣[とみたまさひろ <tomm] -> 4295 2001-09-10 22:41 ┃ ┃ ┗[fuji <fujiyama@xxxxx] 4298 2001-09-12 00:23 ┃ ┃ ┗[<moeru@xxxxxxxxxx> ] 4291 2001-09-10 13:31 ┃ ┗[madara <madara@xxxxx] 4275 2001-09-03 19:54 ┗[Tomohiro 'Tomo-p' KA]