ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

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化したいのですが。
この回答へのお礼この回答にお礼をつける(質問者のみ)