状態によって、取得したいデータをかえたい場合のSQLについて
初心者で困っています。
以下は、状態が1,2,3の場合はデータを取得し、4の場合はデータを取得しないSQLです。
SELECT
みかん.連番
みかん.入荷日
FROM
みかん
INNER JOIN 状態
ON みかん.状態 = 状態.連番
WHERE
みかん.状態 IN (1,2,3)
みかんT
連番 入荷日 状態
1 2010/02/01 1
2 2010/02/03 3
3 2010/02/08 4
4 2010/02/09 1
5 2010/02/13 2
6 2010/02/18 3
状態T
状態連番 項目
1 良好
2 まぁまぁ
3 不良
4 破棄
これからが質問なのですが、
みかんTの連番3の状態が4の場合、状態3のデータ(みかんTでいう連番2,6)は取得したくありません。
そうするには、どう書き換えたらうまく動作するでしょうか・・・
宜しくお願いいたします。。
No.5ベストアンサー
- 回答日時:
>にしますと、状態が1,3の場合は、1のみしか取得できません
「状態が1,3の場合」というのはみかんTに状態が1,3の
データしかないという意味ですよね?
この条件で「状態が1,3の場合は、1のみしか取得できません」
ということは他に原因があるかもですね。
ちなみに以下のselect文で期待している値は取れますでしょうか?
SELECT
連番,
入荷日,
状態
FROM みかん
WHERE
(状態 IN (1,2)) OR
(状態 = 3 AND NOT EXISTS (select * from みかん where 状態 = 4));
たびたびの御回答ありがとうございます。
WHERE みかん.状態 IN (1,2,3)
AND NOT EXISTS ( SELECT * FROM みかん WHERE みかん.状態 IN (4))
上記の記述で解決できました。
EXISTSを使うこと自体頭になかった(使い方もよくわかっていなかった)ため、
とても勉強になりました。
ありがとうございます(*´∀`*)
No.4
- 回答日時:
実機確認していませんが、条件式を次のようにしてみては?
WHERE
(SELECT 状態 FROM みかん WHERE 連番=3)=4 AND 状態<>3
OR
(SELECT 状態 FROM みかん WHERE 連番=3)<>4 AND 状態 IN (1,2,3)
この回答への補足
御回答ありがとうございます。
記述どおりにしてみますと、
”サブクエリは複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後に続く場合や、サブクエリが 1 つの式として使われる場合は複数の値は許可されません。”
というエラーが出ました。
もう少し、考えてみたいと思います。
ありがとうございます。
No.3
- 回答日時:
だめでしたか・・・
0 = CASE みかん.状態
WHEN '3' THEN (SELECT COUNT(*) FROM みかん WHERE 状態 = 4)
ELSE 0
END
select文
(SELECT COUNT(*) FROM みかん WHERE 状態 = 4)
で0がかえってきてないでしょうね。
ちなみに
SELECT isnull(COUNT(*),0) FROM みかん WHERE 状態 = 4
って書換えてもダメでしょうか?
ダメなようなら、条件を
みかん.状態 IN (1,2) OR
(みかん.状態 = 3 AND
NOT EXISTS (select * from みかん 状態 = 4))
に変更してみるとどうでしょうか?
この回答への補足
再度の御回答ありがとうございます。
SELECT文を
>SELECT isnull(COUNT(*),0) FROM みかん WHERE 状態 = 4
にすると、逆に4のデータが取得されてきます。
後記の
>みかん.状態 IN (1,2) OR
>(みかん.状態 = 3 AND
>NOT EXISTS (select * from みかん 状態 = 4))
にしますと、状態が1,3の場合は、1のみしか取得できません(´・ω・`)
再度の御回答なのに、解決できず申し訳ないです。
上記記述も考慮して、考えてみたいと思います。
ありがとうございます!
No.2
- 回答日時:
sql serverがないので確認しておりませんが
AND
0 = CASE みかん.状態
WHEN '3' THEN (SELECT COUNT(*) FROM みかん WHERE 状態 = 4)
ELSE 0
END
または
AND
0 = CASE
WHEN みかん.状態 = '3' THEN (SELECT COUNT(*) FROM みかん WHERE 状態 = 4)
ELSE 0
END
のどちらかを条件に追加してください。
この回答への補足
すみません、下の条件もエラーは出ませんでした。
しかし、どちらの処理も同じ結果で、
4が含まれている3は取得できないようになっていますが、
4がない場合は3が取得できませんでした。。
御回答ありがとうございます。
上の条件を試してみましたが、状態4がないのに3が取得できません。。
下の条件はエラーが出ました。
この記述を基盤に色々といじってみようと思います。
ありがとうございます。
No.1
- 回答日時:
>みかんTの連番3の状態が4の場合、状態3のデータ(みかんTでいう連番2,6)は取得したくありません。
>そうするには、どう書き換えたらうまく動作するでしょうか・・・
この条件は
みかんTに状態が4のデータがある場合は状態4、3のデータ以外(状態1、2)を取得する
みかんTに状態が4のデータがない場合は全てのデータ(状態1、2、3)を取得する
ということでしょうか?
この回答への補足
>みかんTに状態が4のデータがある場合は状態4、3のデータ以外(状態1、2)を取得する
>みかんTに状態が4のデータがない場合は全てのデータ(状態1、2、3)を取得する
その通りです。
説明不足ですみません・・・(汗
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
- Java javaのCSVデータ読込についてです 6 2022/07/02 10:58
- iPhone(アイフォーン) 以前使っていたSIMカード抜いた状態のiPhoneの 写真アプリの中のデータを一括削除して 『最近削 2 2022/05/20 03:00
- LINE 大変困っています。助けて下さい。 LINEの書類とデータの容量が10GBを越えiphoneのストレー 1 2022/09/27 10:29
- その他(恋愛相談) バイトを体調不良で急に辞めた女性がいて、仲良くしてたけどやめた時、何も連絡来なかったのに1ヶ月後位に 4 2023/08/07 05:46
- 教師・教員 教員免許取得について 2 2022/09/29 10:03
- 中古パソコン 中古PCを売る時、OS(Windows11)はどんな状態にするのが親切ですか? 4 2022/12/15 17:08
- システム 質問です。 仮分数はどういう状態ですか? プログラムについてです。 例えば、とあるプログラムで、アイ 1 2023/07/24 01:39
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL Date型の列から年月だけを...
-
年月でdistinctしたい(PostgreSQL)
-
select文の書き方「半角カナ+...
-
PL/pgSQLの返り値の取得方法に...
-
抽出結果を分割して取得
-
ポストグレスでfrom句の中にsel...
-
差し込み後、元データを変更し...
-
フィルターかけた後、重複を除...
-
SELECT 文 GROUP での1件目を...
-
access2021 VBA メソッドまたは...
-
エクセルで最後の文字だけ置き...
-
datetime型でNULL値を入れたい。
-
重複していないレコードの抽出...
-
Oracleのデータ型、NUMBERについて
-
EXISTSを使ったDELETE文
-
カーソル0件の時にエラーを発生...
-
INSERT文でフィールドの1つだ...
-
for whichの使い方
-
COBOL プログラミング
-
PL/SQLの変数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL Date型の列から年月だけを...
-
select文の書き方「半角カナ+...
-
抽出結果を分割して取得
-
Select結果をSelect
-
ポストグレスでfrom句の中にsel...
-
年月でdistinctしたい(PostgreSQL)
-
postgreSQLで更新後のデータを...
-
取得行数の指定
-
SQL文の中に引用符を入れたい
-
round関数について
-
レコード件数のちょうど半分をe...
-
2回目のselect文
-
差し込み後、元データを変更し...
-
フィルターかけた後、重複を除...
-
エクセルで最後の文字だけ置き...
-
外部参照してるキーを主キーに...
-
SELECT 文 GROUP での1件目を...
-
for whichの使い方
-
SQLで特定の項目の重複のみを排...
-
INSERT文でフィールドの1つだ...
おすすめ情報