質問 |
||
| QNo.3913448 | 賢いSQL文がわからない | |
|---|---|---|
| 質問者:angelinaane |
お世話になります。 メインテーブルAと詳細テーブルBがあります。 テーブルA(ID・名前) テーブルB(ID・テーブルAのID・区分・内容) テーブルA:テーブルBは、1:Nの関係です。 またテーブルBがないものもあります。 名前あるいは名前と内容で検索をしたいのですが、 どのようにかけばいいのでしょうか? テーブルAの形で結果がほしいのですが。 よろしくお願いします。 |
|
困り度:
|
||
| 質問投稿日時: 08/04/01 18:07 |
||
回答良回答20pt |
|
| ANo.2 | こんにちは、angelinaane様 以下のSQLではいかがでしょうか? SELECT tablea.ID,tablea.name FROM tablea LEFT JOIN tableb ON tablea.id = tableb.id WHERE tablea.name LIKE '%あああ%' AND tableb.kubun = 1 and tableb.naiyo >= 0 UNION SELECT tablea.ID,tablea.name FROM tablea LEFT JOIN tableb ON tablea.id = tableb.id WHERE tablea.name LIKE '%あああ%' AND tableb.kubun = 2 and tableb.naiyo >= 5 UNION SELECT tablea.ID,tablea.name FROM tablea LEFT JOIN tableb ON tablea.id = tableb.id WHERE tablea.name LIKE '%あああ%' AND tableb.kubun = 3 and tableb.naiyo <= 8 単純にUNIONで結合しただけです。 一応、条件通りだと思うのですが、もっと複雑な気がしています。 もしかして、 >区分1のとき内容が0以上 かつ >区分2のとき内容が5以上 かつ >区分3のとき内容が8以下 この条件は可変とか・・・ だとすると、プログラム中でSQLを組むだけなんですけどね。 |
|---|---|
| 回答者:oops1967 | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/04/02 09:04 |
|
| |
| この回答へのお礼 | oops1967様 朝から回答ありがとうございます。 結局のところ、テーブルBを3つ外部結合しましたら なんとか動いてくれました。 教えていただいたUNION結合でもできるのか まだ試していませんが、 UNIONって「かつ」の条件なんでしょうか。 「または」というイメージなんですけれど。 重複データのみがほしいです・・。 とりあえず、回答いただけてヒントになりました。 ありがとうございました。 |
回答 |
|
| ANo.1 | こんにちは、angelinaane様 WHERE条件が解らないので、取り敢えず or でやってみました。 一応、チェックはしたのですが、これで良いでしょうか? SELECT tablea.ID,tablea.name FROM tablea LEFT JOIN tableb ON tablea.id = tableb.id WHERE tablea.name = 'bbb' OR tableb.naiyo = 'bbb' ORDER BY ID なんか、もっと複雑なお話しのような気がします。 |
|---|---|
| 回答者:oops1967 | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/04/01 19:00 |
|
| |
| この回答への補足 | oops1967様 回答ありがとうございます。 もうすこし正確に言いますと、 名前が「%あああ%」かつ 区分1のとき内容が0以上 かつ 区分2のとき内容が5以上 かつ 区分3のとき内容が8以下 というような条件です。 で、結果はテーブルAのIDでGROUP化したいのですが。 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |