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

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

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

Re[7]: WHERE句内での条件分岐


(過去ログ 51 を表示中)

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

■28420 / inTopicNo.1)  WHERE句内での条件分岐
  
□投稿者/ メシナ (4回)-(2008/11/26(Wed) 09:50:20)

分類:[VB.NET/VB2005 以降] 

SQL文について質問します。

SELECT 
  AAAA,
  BBBB,
  CCCC  
FROM TABLE_1

WHERE 
  AAAA = 4 AND 

  「もしBBBB=1だったら 
  CCCC = 2
   そうじゃなかったら何も書かない」


みたいなことをしたいのですが、SQL一文で書くことはできるでしょうか?
CASE文やif文を調べてみたのですが、解決に至りませんでした。
どうぞよろしくお願いします。

引用返信 編集キー/
■28422 / inTopicNo.2)  Re[1]: WHERE句内での条件分岐
□投稿者/ ぱると (6回)-(2008/11/26(Wed) 10:04:27)
2008/11/26(Wed) 10:04:42 編集(投稿者)
「何も書かない」がNULLを示しているなら
SELECT 
  AAAA,
  BBBB,
  CASE
    WHEN BBBB = 1 THEN
      2
    ELSE
      NULL
    END CCCC
FROM TABLE_1

WHERE 
  AAAA = 4

もしくはこっち?
SELECT 
  AAAA,
  BBBB,
  2 AS CCCC
FROM TABLE_1

WHERE 
  AAAA = 4 AND BBBB = 1

一番重要な事が書いてないのでOracle10gで勝手に書いてみました。

引用返信 編集キー/
■28438 / inTopicNo.3)  Re[2]: WHERE句内での条件分岐
□投稿者/ まさる (26回)-(2008/11/26(Wed) 11:34:56)
まさる さんの Web サイト
2008/11/26(Wed) 11:41:18 編集(投稿者)
No28422 (ぱると さん) に返信
> 2008/11/26(Wed) 10:04:42 編集(投稿者)
> 
> 「何も書かない」がNULLを示しているなら
> SELECT 
>   AAAA,
>   BBBB,
>   CASE
>     WHEN BBBB = 1 THEN
>       2
>     ELSE
>       NULL
>     END CCCC
> FROM TABLE_1
> 
> WHERE 
>   AAAA = 4
> 
> もしくはこっち?
> SELECT 
>   AAAA,
>   BBBB,
>   2 AS CCCC
> FROM TABLE_1
> 
> WHERE 
>   AAAA = 4 AND BBBB = 1
> 
> 一番重要な事が書いてないのでOracle10gで勝手に書いてみました。
> 

「WHERE句内で」ということなので、

SELECT 
  AAAA,
  BBBB,
  CCCC  
FROM TABLE_1

WHERE 
  AAAA = 4 AND 
  (
    ( BBBB = 1 AND CCCC = 2 ) OR
    BBBB <> 1
  )

ということではないかと思います。

[追記]
ところで分類が[VB.NET/VB2005 以降]になってますが、[データベース 全般]の方が良いと思いますよ。

引用返信 編集キー/
■28475 / inTopicNo.4)  Re[1]: WHERE句内での条件分岐
□投稿者/ Jitta on the way (232回)-(2008/11/26(Wed) 18:30:49)
No28420 (メシナ さん) に返信
> WHERE
> AAAA = 4 AND
>
> 「もしBBBB=1だったら 
>   CCCC = 2
>  そうじゃなかったら何も書かない」
>
>
> みたいなことをしたいのですが、

Structured Query Language 構造化問い合わせ言語を誤解していると思います。問い合わせを行うための言語です。条件分岐を行う言語ではありません。
引用返信 編集キー/
■28476 / inTopicNo.5)  Re[2]: WHERE句内での条件分岐
□投稿者/ みきぬ (244回)-(2008/11/26(Wed) 18:48:38)
また某所で怒られそうですが、突っ込み屋の血が騒ぐので許してください。

No28475 (Jitta on the way さん) に返信
> Structured Query Language 構造化問い合わせ言語を誤解していると思います。問い合わせを行うための言語です。条件分岐を行う言語ではありません。

Wikipedia を信用するなら、SQL は何かの略語というわけではないらしいです。
それに CASE 式もありますし、「条件分岐を行う言語ではない」というのは適切でないと思います。
http://ja.wikipedia.org/wiki/SQL

# 私は私で、Simple Query Language の略だと思ってたorz
引用返信 編集キー/
■28481 / inTopicNo.6)  Re[3]: WHERE句内での条件分岐
□投稿者/ Jitta on the way (233回)-(2008/11/26(Wed) 21:26:47)
No28476 (みきぬ さん) に返信
> それに CASE 式もありますし、「条件分岐を行う言語ではない」というのは適切でないと思います。

これは、くると思った。「処理をする言語ではない」に訂正します。「何も書かない」ってところへの反応です。
(case も、「条件分岐」ではなく「条件選択」だと思います。「何かを“する”」わけではないと思います。)
引用返信 編集キー/
■28488 / inTopicNo.7)  Re[4]: WHERE句内での条件分岐
□投稿者/ まんごーぷりん (48回)-(2008/11/27(Thu) 00:15:35)
まんごーぷりん さんの Web サイト
No28481 (Jitta on the way さん) に返信
> ■No28476 (みきぬ さん) に返信
>>それに CASE 式もありますし、「条件分岐を行う言語ではない」というのは適切でないと思います。
>
> これは、くると思った。「処理をする言語ではない」に訂正します。「何も書かない」ってところへの反応です。
> (case も、「条件分岐」ではなく「条件選択」だと思います。「何かを“する”」わけではないと思います。)

これは微妙な気がします。

確かに僕も SQL 文に条件分岐という表現は違和感を感じます。

ただ、何らかのソースデータを受け取って、それに基づく振る舞いを DB エンジンが行うという点では、ソースコードを受け取って、それに基づく振る舞いを行う動的言語と大きな違いは無いとも言えますよね。
引用返信 編集キー/
■28495 / inTopicNo.8)  Re[5]: WHERE句内での条件分岐
□投稿者/ なちゃ (215回)-(2008/11/27(Thu) 09:07:44)
そもそも質問者は単に論理式というか論理演算というものを知らなかっただけと思われますから、
言葉に突っ込むなら、こういうのは普通条件分岐とは言わないですよってところで、
SQLはどうだと言ってもあまり意味ないと思いますよ。

余談として書くなら別にいいと思いますが。

引用返信 編集キー/
■28497 / inTopicNo.9)  Re[6]: WHERE句内での条件分岐
□投稿者/ メシナ (5回)-(2008/11/27(Thu) 09:32:20)
みなさま、回答ありがとうございました。
調べてみたところ、やはりできないみたいですね;;

知識不足で申し訳ございませんでした。
解決済み
引用返信 編集キー/
■28498 / inTopicNo.10)  Re[7]: WHERE句内での条件分岐
□投稿者/ みきぬ (245回)-(2008/11/27(Thu) 09:37:54)
No28497 (メシナ さん) に返信
> みなさま、回答ありがとうございました。
> 調べてみたところ、やはりできないみたいですね;;
>
> 知識不足で申し訳ございませんでした。

ん? 意図したいことは、まさるさんが書いたようにすればできますよ?
ただそれは条件分岐ではなくて、場合分けと言った方がいいのかしら。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -