プロが教えるわが家の防犯対策術!

VB2005、FlexGrid.NET環境です。
SQLを投げて、結果をグリッドに表示するプログラムを作っています。

ちょっとややこしいのですが…。

たとえば、

テーブルA   テーブルB
-----------------------------------------
ごはん朝
-----------------------------------------
魚朝
-----------------------------------------
肉夜
-----------------------------------------

テーブルAには、食べ物の一覧のデータが入っていて、
JOINするテーブルBにはそれを朝食べたのか夜食べたのか判定する
フラグがあります。

これを、下記のようにしたいのですが

テーブルA   テーブルB
-----------------------------------------
ごはん朝 ○
ごはん      夜
-----------------------------------------
魚 朝 ○
魚       夜
-----------------------------------------
肉朝
肉夜 ○
-----------------------------------------

SQL的には、フラグのカラムが0なら朝、1なら夜、みたいに
表示しているのですが、キーが複数個あるので、朝と夜、肉を
食べたということもありえます。
なので、フラグに関わらず、朝と夜の2レコードを表示させて
おきたいのですが、この動作を実現させる方法を教えていただけ
ないでしょうか?

ImportRowとか使えば出来そうな気がするんですが、うまくいかず
困っています。

A 回答 (2件)

SQL文に関する質問だとすれば・・・。



A:

ID__品名
1___ごはん
2___魚
3___肉

B:

ID__A_ID___判定子
1________1__________0
2________2__________0
3________3__________1

クエリ:

品名_____時間___判定子丸表示
ごはん___朝______O
ごはん___夜________
魚_________朝______O
魚_________夜________
肉_________朝________
肉_________夜______O

SELECT A.品名, "朝" AS 時間, "O" AS 判定子丸表示 FROM A RIGHT JOIN B ON A.ID=B.A_ID WHERE (((B.判定子)=0))
UNION
SELECT A.品名, "朝" AS 時間, "" AS 判定子丸表示 FROM A RIGHT JOIN B ON A.ID=B.A_ID WHERE (((B.判定子)=1))
UNION
SELECT A.品名, "夜" AS 時間, "" AS 判定子丸表示 FROM A RIGHT JOIN B ON A.ID=B.A_ID WHERE (((B.判定子)=0))
UNION
SELECT A.品名, "夜" AS 時間, "O" AS 判定子丸表示 FROM A RIGHT JOIN B ON A.ID=B.A_ID WHERE (((B.判定子)=1));

B:

ID__A_ID___判定子
1________1__________0
2________2__________0

クエリ:

品名_____時間___判定子丸表示
ごはん___朝______O
ごはん___夜________
魚_________朝______O
魚_________夜________

仮にBに肉に関する情報がなければこのようになります。
    • good
    • 0

VB側で処理するより、SQL側で処理した方が早いかな?


・テーブルAとテーブルBをLEFT JOINでつなぐ。
・朝食べたものだけを抽出するクエリと夜食べたものだけを抽出するクエリをUNIONする。 
て感じで。こうすれば各食べ物で2行ずつ出るはずです。

SELECT テーブルA.* ,
テーブルB.フラグ ,
'1' AS SORTFLG
FROM テーブルA
LEFT JOIN テーブルB ON テーブルA.食べ物 = テーブルB.食べ物
WHERE テーブルB.フラグ = 朝

UNION

SELECT テーブルA.* ,
テーブルB.フラグ ,
'2' AS SORTFLG
FROM テーブルA
LEFT JOIN テーブルB ON テーブルA.食べ物 = テーブルB.食べ物
WHERE テーブルB.フラグ = 夜

ORDER BY テーブルA.食べ物,SORTFLG
    • good
    • 0

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