C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: SQL文の記述方法について


(過去ログ 135 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■79514 / inTopicNo.1)  SQL文の記述方法について
  
□投稿者/ 麦茶 (1回)-(2016/04/11(Mon) 14:08:04)

分類:[データベース全般] 

==========================
環境:Windows7
DB:MSSQL2008std
==========================

下記の条件にて、SQL文の記述方法についてご教示のほどよろしくお願い致します。

【Tbl_A】

inf_01,inf_02,inf_03,inf_04,inf_05,inf_06,inf_07

【Tbl_B】

inf_01,inf_02,inf_03,inf_04,inf_05,inf_06,inf_07,inf_08,inf_09,inf_10,inf_11,inf_12,inf_13,inf_14


以上2つのテーブルを下記条件にてビューを表示させたい

<条件1>

Tbl_A.inf_02=Tbl_B.inf_03 AND Tbl_A.inf_03=Tbl_B.inf_04

<条件2>

Tbl_A.inf_04=Tbl_B.inf_03 AND Tbl_A.inf_05=Tbl_B.inf_04

<条件3>

Tbl_A.inf_06=Tbl_B.inf_03 AND Tbl_A.inf_07=Tbl_B.inf_04


上記の条件で、下記の順番で(ビュー)表示させたい

Tbl_A.inf_01,
Tbl_A.inf_02,
Tbl_A.inf_03,
Tbl_B.inf_07,
Tbl_B.inf_08,
Tbl_B.inf_14,
Tbl_B.inf_11,
Tbl_A.inf_04,
Tbl_A.inf_05,
Tbl_B.inf_07,
Tbl_B.inf_08,
Tbl_B.inf_14,
Tbl_B.inf_11,
Tbl_A.inf_06,
Tbl_A.inf_07,
Tbl_B.inf_07,
Tbl_B.inf_08,
Tbl_B.inf_14,
Tbl_B.inf_11,

----------------------------------------------------------------
また自力では、<条件1>のみでの表示は下記で表示できました。

SELECT Tbl_A.inf_01,
Tbl_A.inf_02,
Tbl_A.inf_03,
Tbl_B.inf_07,
Tbl_B.inf_08,
Tbl_B.inf_14,
Tbl_B.inf_11 AS Expr1

FORM Tbl_A INNER JOIN Tbl_B ON
Tbl_A.inf_02=Tbl_B.inf_03 AND Tbl_A.inf_03=Tbl_B.inf_04

上記のように、<条件1>ではできたが、<条件2>と<条件3>合わせて表示させて方法が
分かりません。ご教示のほどよろしくお願い致します。
引用返信 編集キー/
■79517 / inTopicNo.2)  Re[1]: SQL文の記述方法について
□投稿者/ 魔界の仮面弁士 (688回)-(2016/04/11(Mon) 15:21:08)
No79514 (麦茶 さん) に返信
> 以上2つのテーブルを下記条件にてビューを表示させたい

その 3 つの条件を繋ぐものは、OR なのでしょうか、AND なのでしょうか。


> <条件1>ではできたが、<条件2>と<条件3>合わせて表示させて方法が分かりません。

INNER JOIN であれ、WHERE 句での結合であれ、

(Tbl_A.inf_02=Tbl_B.inf_03 AND Tbl_A.inf_03=Tbl_B.inf_04)
OR
(Tbl_A.inf_04=Tbl_B.inf_03 AND Tbl_A.inf_05=Tbl_B.inf_04)
OR
(Tbl_A.inf_06=Tbl_B.inf_03 AND Tbl_A.inf_07=Tbl_B.inf_04)

あるいは

Tbl_B.inf_03 IN (Tbl_A.inf_02, Tbl_A.inf_04, Tbl_A.inf_06)
AND
Tbl_B.inf_04 IN (Tbl_A.inf_03, Tbl_A.inf_05, Tbl_A.inf_07)

でいけないでしょうか? (未確認)
引用返信 編集キー/
■79520 / inTopicNo.3)  Re[2]: SQL文の記述方法について
□投稿者/ 麦茶 (2回)-(2016/04/11(Mon) 16:24:40)
魔界の仮面弁士 様
ご回答ありがとうございます。説明下手ですいません!
補足させてください。

【Tbl_A】


inf_01,inf_02,inf_03,inf_04,inf_05,inf_06,inf_07
1    1  a 2 b 3 c
2 1 a 2 b 1 a
3 1 a 3 c 2 b


【Tbl_B】ユーザーマスター(主キーはinf_01で設定されているが、Tbl_Aとは異なる inf_03 AND inf_04 で一致するものをビューで表示)

inf_01,inf_02,inf_03,inf_04,inf_05,inf_06,inf_07,inf_08,inf_09,inf_10,inf_11,inf_12,inf_13,inf_14
1 a あ   い         う          え
        2 b か   き         く          け
        3 c さ   し         す          せ


これを[]はTbl_Bです。

inf_01,inf_02,inf_03,[inf_07],[inf_08],[inf_14],[inf_11],inf_04,inf_05,[inf_07],[inf_08],[inf_14],[inf_11],inf_06,inf_07 ・・同左
1    1  a あ    い   え    う   2 b  か    き   け    く   3 c
2 1 a あ    い   え    う   2 b  か    き   け    く   1 a
3 1 a あ    い   え    う   3 c   さ し   せ    す   2 b

こんな感じです。
引用返信 編集キー/
■79521 / inTopicNo.4)  Re[3]: SQL文の記述方法について
□投稿者/ 魔界の仮面弁士 (689回)-(2016/04/11(Mon) 16:55:59)
No79520 (麦茶 さん) に返信
> 補足させてください。
えーと。。。結果が 3 行ということは、こういうことで良いのかな。


SELECT 
    Tbl_A.inf_01,
    Tbl_A.inf_02, 
    Tbl_A.inf_03,
    TblB1.inf_07,
    TblB1.inf_08,
    TblB1.inf_14,
    TblB1.inf_11,

    Tbl_A.inf_04, 
    Tbl_A.inf_05,
    TblB2.inf_07,
    TblB2.inf_08,
    TblB2.inf_14,
    TblB2.inf_11,

    Tbl_A.inf_06, 
    Tbl_A.inf_07,
    TblB3.inf_07,
    TblB3.inf_08,
    TblB3.inf_14,
    TblB3.inf_11 
FROM Tbl_A 
  INNER JOIN Tbl_B AS TblB1
  ON Tbl_A.inf_02=TblB1.inf_03 AND Tbl_A.inf_03=TblB1.inf_04
  INNER JOIN Tbl_B AS TblB2
  ON Tbl_A.inf_04=TblB2.inf_03 AND Tbl_A.inf_05=TblB2.inf_04
  INNER JOIN Tbl_B AS TblB3
  ON Tbl_A.inf_06=TblB3.inf_03 AND Tbl_A.inf_07=TblB3.inf_04
GO

引用返信 編集キー/
■79522 / inTopicNo.5)  Re[4]: SQL文の記述方法について
□投稿者/ 麦茶 (4回)-(2016/04/11(Mon) 17:10:08)
No79521 (魔界の仮面弁士 さん) に返信
> ■No79520 (麦茶 さん) に返信
>>補足させてください。
> えーと。。。結果が 3 行ということは、こういうことで良いのかな。
>
>
> SELECT
> Tbl_A.inf_01,
> Tbl_A.inf_02,
> Tbl_A.inf_03,
> TblB1.inf_07,
> TblB1.inf_08,
> TblB1.inf_14,
> TblB1.inf_11,
>
> Tbl_A.inf_04,
> Tbl_A.inf_05,
> TblB2.inf_07,
> TblB2.inf_08,
> TblB2.inf_14,
> TblB2.inf_11,
>
> Tbl_A.inf_06,
> Tbl_A.inf_07,
> TblB3.inf_07,
> TblB3.inf_08,
> TblB3.inf_14,
> TblB3.inf_11
> FROM Tbl_A
> INNER JOIN Tbl_B AS TblB1
> ON Tbl_A.inf_02=TblB1.inf_03 AND Tbl_A.inf_03=TblB1.inf_04
> INNER JOIN Tbl_B AS TblB2
> ON Tbl_A.inf_04=TblB2.inf_03 AND Tbl_A.inf_05=TblB2.inf_04
> INNER JOIN Tbl_B AS TblB3
> ON Tbl_A.inf_06=TblB3.inf_03 AND Tbl_A.inf_07=TblB3.inf_04
> GO
引用返信 編集キー/
■79524 / inTopicNo.6)  Re[5]: SQL文の記述方法について
□投稿者/ 麦茶 (5回)-(2016/04/11(Mon) 17:13:33)
魔界の仮面弁士 様

ご回答どうもありがとうございます。

テーブルは(Tbl_AとTbl_B)しかないので、
下記のSQL文を「TblB1、TblB2、TblB3、Tbl_B」をTbl_Bとして
テストしてみましたが、残念ながらうまくいきませんでした。
すいません。

>>■No79520 (麦茶 さん) に返信
> >>補足させてください。
>>えーと。。。結果が 3 行ということは、こういうことで良いのかな。
>>
>>
>>SELECT
>> Tbl_A.inf_01,
>> Tbl_A.inf_02,
>> Tbl_A.inf_03,
>> TblB1.inf_07,
>> TblB1.inf_08,
>> TblB1.inf_14,
>> TblB1.inf_11,
>>
>> Tbl_A.inf_04,
>> Tbl_A.inf_05,
>> TblB2.inf_07,
>> TblB2.inf_08,
>> TblB2.inf_14,
>> TblB2.inf_11,
>>
>> Tbl_A.inf_06,
>> Tbl_A.inf_07,
>> TblB3.inf_07,
>> TblB3.inf_08,
>> TblB3.inf_14,
>> TblB3.inf_11
>>FROM Tbl_A
>> INNER JOIN Tbl_B AS TblB1
>> ON Tbl_A.inf_02=TblB1.inf_03 AND Tbl_A.inf_03=TblB1.inf_04
>> INNER JOIN Tbl_B AS TblB2
>> ON Tbl_A.inf_04=TblB2.inf_03 AND Tbl_A.inf_05=TblB2.inf_04
>> INNER JOIN Tbl_B AS TblB3
>> ON Tbl_A.inf_06=TblB3.inf_03 AND Tbl_A.inf_07=TblB3.inf_04
>>GO
引用返信 編集キー/
■79525 / inTopicNo.7)  Re[6]: SQL文の記述方法について
□投稿者/ 魔界の仮面弁士 (690回)-(2016/04/11(Mon) 17:19:17)
No79524 (麦茶 さん) に返信
> テーブルは(Tbl_AとTbl_B)しかないので、

私の SQL もそうですよ。


> テストしてみましたが、残念ながらうまくいきませんでした。

手元の SQL Server 2008 では、提示されたものと
同じ結果が返ってきていますが、そちらは駄目だったのですね。

エラーが出たのなら、エラー内容を教えてください。
エラーにはならないが期待する結果では無いのなら、それを提示してください。


>> inf_01,inf_02,inf_03,[inf_07],[inf_08],[inf_14],[inf_11],inf_04,inf_05,[inf_07],[inf_08],[inf_14],[inf_11],inf_06,inf_07 ・・同左

省略せずに書くと、こんな感じになりました。
横長の投稿は読みにくいので、掲示板には縦横変換して貼り付けています。

inf_01| 1   2   3
inf_02| 1   1   1
inf_03| a   a   a
inf_07| あ  あ  あ
inf_08| い  い  い
inf_14| え  え  え
inf_11| う  う  う
inf_04| 2   2   3
inf_05| b   b   c
inf_07| か  か  さ
inf_08| き  き  し
inf_14| け  け  せ
inf_11| く  く  す
inf_06| 3   1   2
inf_07| c   a   b
inf_07| さ  あ  か
inf_08| し  い  き
inf_14| せ  え  け
inf_11| す  う  く

引用返信 編集キー/
■79526 / inTopicNo.8)  Re[7]: SQL文の記述方法について
□投稿者/ 麦茶 (6回)-(2016/04/11(Mon) 17:50:29)
魔界の仮面弁士 様

ご回答どうもありがとうございます。

ご指摘の通り、こちらの確認不足でした。
(TblB1、TblB2、TblB3)をTbl_Bとして置換しまったため(-_-;)
この3つのテーブルをそのままにして、再度テストしたら、見事に上手くいきました。
本当に親切にご教示をいただきまして、ありがとうございました。大変助かりました。

解決済み
引用返信 編集キー/
■79531 / inTopicNo.9)  Re[7]: SQL文の記述方法について
□投稿者/ 麦茶 (7回)-(2016/04/12(Tue) 10:19:38)
昨日はお世話になりました。ありがとうございます。
また、本件でのご質問をさせて頂きます。

【Tbl_A】inf_01,inf_02,inf_03,inf_04,inf_05,inf_06,inf_07

昨日は【Tbl_A】に3行のデータがすべて入力されていることを想定してテスト実施した結果はOKでしたが、
しかし、inf_06,inf_07が空欄の場合でも、inf_04,inf_05までのデータを表示させたいので、再度投稿させて頂きました。
現状では、3行目の【inf_06,inf_07】が空欄の場合では、1と2の行しか表示されませんでした。

度々、すいませんが、ご教示のほどよろしくお願い致します。

>
> 省略せずに書くと、こんな感じになりました。
> 横長の投稿は読みにくいので、掲示板には縦横変換して貼り付けています。
>
> inf_01| 1 2 3
> inf_02| 1 1 1
> inf_03| a a a
> inf_07| あ あ あ
> inf_08| い い い
> inf_14| え え え
> inf_11| う う う
> inf_04| 2 2 3
> inf_05| b b c
> inf_07| か か さ
> inf_08| き き し
> inf_14| け け せ
> inf_11| く く す
> inf_06| 3 1 2
> inf_07| c a b
> inf_07| さ あ か
> inf_08| し い き
> inf_14| せ え け
> inf_11| す う く
引用返信 編集キー/
■79532 / inTopicNo.10)  Re[8]: SQL文の記述方法について
□投稿者/ 魔界の仮面弁士 (691回)-(2016/04/12(Tue) 10:37:49)
No79531 (麦茶 さん) に返信
> inf_06,inf_07が空欄の場合でも、inf_04,inf_05までのデータを表示させたい

内部結合ではなく、外部結合にしてみてください。
引用返信 編集キー/
■79534 / inTopicNo.11)  Re[9]: SQL文の記述方法について
□投稿者/ 麦茶 (8回)-(2016/04/12(Tue) 11:09:43)
魔界の仮面弁士 様

ご回答どうもありがとうございます。
【INNER JOIN】を【LEFT OUTER JOIN】変更して、無事できました。^^)
ありがとうございました。本当に感謝感謝です!
> ■No79531 (麦茶 さん) に返信
>>inf_06,inf_07が空欄の場合でも、inf_04,inf_05までのデータを表示させたい
>
> 内部結合ではなく、外部結合にしてみてください。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -