アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

メインテーブルAと詳細テーブルBがあります。
 テーブルA(ID・名前)
 テーブルB(ID・テーブルAのID・区分・内容)
テーブルA:テーブルBは、1:Nの関係です。
またテーブルBがないものもあります。

名前あるいは名前と内容で検索をしたいのですが、
どのようにかけばいいのでしょうか?
テーブルAの形で結果がほしいのですが。

よろしくお願いします。

A 回答 (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を組むだけなんですけどね。
    • good
    • 0
この回答へのお礼

oops1967様
朝から回答ありがとうございます。

結局のところ、テーブルBを3つ外部結合しましたら
なんとか動いてくれました。

教えていただいたUNION結合でもできるのか
まだ試していませんが、
UNIONって「かつ」の条件なんでしょうか。
「または」というイメージなんですけれど。
重複データのみがほしいです・・。

とりあえず、回答いただけてヒントになりました。
ありがとうございました。

お礼日時:2008/04/02 13:48

こんにちは、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様
回答ありがとうございます。

もうすこし正確に言いますと、
名前が「%あああ%」かつ
区分1のとき内容が0以上 かつ
区分2のとき内容が5以上 かつ
区分3のとき内容が8以下
というような条件です。

で、結果はテーブルAのIDでGROUP化したいのですが。

補足日時:2008/04/01 19:26
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!