- - PR -
データの抽出
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2009-02-27 01:23
MySQLを使用して勉強しています。
以下のテーブルがあります。 aテーブル |id |nid |clm1 |clm2 |clm3 | |1 |aaa |1 |1 |aaa | |2 |bbb |2 | |bbb | |3 |ccc |3 |3 |cccc | |4 |ddd |4 |4 |ddd | bテーブル |id |nid |clm1 |clm2 |clm3 | |1 |aaa |1 |1 |aaa | |2 |bbb |2 | |bbb | |3 |ccc |33 |333 |ccc | 条件としては『id』と『nid』が一致しているが 他のカラム『clm1』『clm2』『clm3』が一致していないレコード ここでいうと aテーブルの『|3 |ccc |3 |3 |cccc |』 を抽出したいのですが うまく引き出せません。 ご教授願います。 | ||||
|
投稿日時: 2009-02-27 09:44
a.id = b.id and a.nid = b.nid and
(a.clm1 != b.clm1 or a.clm2 != b.clm2 or a.clm3 != b.clm3) | ||||
|
投稿日時: 2009-02-27 10:57
ちょっと難癖っぽくてすみませんが、個人的には「答えをそのまま書く」というスタイルは、考える機会を奪ってしまうように思えて好きじゃないんですよ。 この場合「『id』と『nid』が一致している」は、「a.id=b.id and a.nid=b.nid ですよ」くらいに書いた方がいいのではないでしょうか? (ってか、この程度、マニュアルをよく読んでれば分かるはずのレベルの内容なんですけどね。) ところで、SQLで不一致というと「<>」ではないでしょうか? | ||||
|
投稿日時: 2009-02-27 11:34
不等号については「<>」でした、すみません。
「答えをそのまま書く」については普段はあまりしません。 ただヒントを書いても他の方が答えを書いちゃうので 冬寂さんの様な事を言いたくなる事もあります。 というかそのまま書いたときは 「これくらいわかるだろ?」という意味を含めています。 そう取られなければそれでも良いです。 | ||||
|
投稿日時: 2009-02-27 11:53
RDBMSには、少なからず独自機能があります。 MySQLでは、「<>」に加え、「!=」も使用可能です。 http://dev.mysql.com/doc/refman/4.1/ja/comparison-operators.html MySQLを使用して「勉強中」とのことなので、このテーブルが「扱いやすいテーブルではない」ということを考えましょう。 どうして、こういうテーブル設計になったのでしょうか? もっと扱いやすいテーブルにできないのでしょうか? | ||||
|
投稿日時: 2009-02-27 12:16
clm1〜3 の値が Null である可能性も考慮するとこうかしら。
# 望む結果次第だけど、and のところは or のほうが適切かもしれない ※日本語修正 [ メッセージ編集済み 編集者: rain 編集日時 2009-02-27 12:31 ] | ||||
|
投稿日時: 2009-02-28 10:36
Kingさん、
忠犬さん、 rainさん ありがとうございました。 Kingさんの投稿で抽出が行えました。 また、rainさんの投稿でもnullが考慮された抽出が行えました。 お手数をおかけいたしました。 MySQLの勉強に励みたいと思います。 |
1