皆様、ご教授願います。
初めてoracleを利用しているので、ほんとの初心者で
記述の方法がわかりません。
下記の記述でカウントの結果が異なります。
私の中では、同じ結果が得られると思うのですが
どのような違いがあるのでしょうか???
-------------------パターン1-------------------
SELECT
count(A.SO_CODE)
FROM
URI_HEAD A,
KOKUB_FILE B
WHERE
A.SO_CODE=B.SO_CODE(+)
-------------------パターン2-------------------
SELECT
count(A.SO_CODE)
FROM
URI_HEAD A,
KOKUB_FILE B
WHERE
A.SO_CODE=B.SO_CODE(+) AND
A.KYOTEN_CODE like '%' AND
B.TAN_CODE like '%'
ORDER BY
A.SO_CODE asc
最終的には、パターン2のそれぞれの項目に
条件が入るのですが、テスト段階でまずは、あいまい検索に
してみたのですが。。。
この記述に誤りがあるのでしょうか???
MSSQLやpostgresは使ったことがあるのですが
oracleは初めてなので、SQL文の記述に誤りがあるのか、oracleを利用したときの記述に誤りがあるのか
判断がつかなくて、先に進めません。
教えてください。。。
No.4ベストアンサー
- 回答日時:
>私の中では、同じ結果が得られると思うのですが
>どのような違いがあるのでしょうか???
まず、誤りの是正から..
パターン2のSQLのWHERE句に書かれた
B.TAN_CODE like '%' は、 B.TAN_CODE(+) like '%' でなければいけません。
そうでないと、正しい外部結合がされません。
次に、件数の相違ですが、正しい外部結合式を書いたパターン2の件数は
select count(A_SO_CODE) from URI_HEAD where KYOTEN_CODE is NULL;
で返される件数分だけ、パターン1と違うはずです。
A.KYOTEN_CODE like '%' は、暗黙的に is not null を意味するからです。
お礼が遅くなり、大変失礼致しました。
開発の納期が迫ってしまい、確認が遅くなりました。
改めまして、ご回答ありがとうございました。
今回は、外部結合ではなく、内部結合をしなければならなかったようです。
目的は誤っていましたが、新しいことが知識が得られて参考になりました。
No.3
- 回答日時:
#2です。
SELECT
count(A.SO_CODE)
FROM
URI_HEAD A,
KOKUB_FILE B
WHERE
A.SO_CODE=B.SO_CODE(+) AND
NVL(TO_CHAR(A.KYOTEN_CODE),'') like '%' AND
NVL(TO_CHAR(B.TAN_CODE),'') like '%'
ORDER BY
A.SO_CODE asc
上記の記述ではどうでしょうか。
実行した結果、「ORA-01722: 数値が無効です。」と
エラーメッセージが表示されました。
A.KYOTEN_CODE
B.TAN_CODE
この2つはどちらもCHAR型です。
No.2
- 回答日時:
外部結合によりBテーブルの方にNULLを含むデータが
存在している可能性があるため、
B.TAN_CODE like '%'
によりNULLが検索できず、取得できなくなると思われます。
Azzuriさん
ご回答ありがとうございます。
こういうことなのかなと思い、パターン3で実行してみましたが、件数はパターン1と合致しませんでした(ノ_・。)
SELECT
count(A.SO_CODE)
FROM
URI_HEAD A,
KOKUB_FILE B
WHERE
A.SO_CODE=B.SO_CODE(+) AND
A.KYOTEN_CODE like '%' AND
(B.TAN_CODE like '%' or B.TAN_CODE is NULL)
ORDER BY
A.SO_CODE asc
No.1
- 回答日時:
あいまい検索の部分で、値がNullのレコードが省かれるため、パターン2のSQLの結果の方が件数が少なくなると思います。
以下のSQLならパターン1と同じになると思います。
SELECT
count(A.SO_CODE)
FROM
URI_HEAD A,
KOKUB_FILE B
WHERE
A.SO_CODE=B.SO_CODE(+) AND
(A.KYOTEN_CODE like '%' or A.KYOTEN_CODE is NULL) AND
(B.TAN_CODE like '%' or B.TAN_CODE is NULL)
ORDER BY
A.SO_CODE asc
Tearissさん
回答ありがとうございます。
さっそく実行してみました。
すると・・・
パターン1の結果より件数が多くなりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP $_SESSIONについて教えて下さい。 4 2023/03/13 13:45
- Visual Basic(VBA) batにて、異なるフォルダの同名ファイルを参照し、文字列を判別。擬似配列で変数へ格納 3 2022/04/10 03:37
- その他(プログラミング・Web制作) VS codeを使って、ラズパイ Picoを動かせる簡単な方法 1 2023/04/27 13:49
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Visual Basic(VBA) ローマ字、ハイフン付きの並び替え ローマ字抽出方法 Excelマクロ 4 2022/04/01 14:10
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- オープンソース Try Kotlinで readLine()を使うには 1 2023/03/27 21:06
- PHP PHP MySql ページング 2 2022/09/20 06:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select句副問い合わせ 値の個...
-
select insertで複数テーブルか...
-
他のテーブルを参照した値はupd...
-
unionの結果は集計はできないで...
-
MERGE文を単体テーブルに対して...
-
AccessからOracleへの外部結合
-
SELECTの結果で同一行を複数回...
-
SET句内で複数の条件を指定して...
-
SQLでの絞り込み検索
-
外部結合とor条件混在の記述方法
-
【SQL】SELECT文
-
結合と副問い合わせの違い
-
updateの一括実行
-
select文でフリーズします。
-
重複レコードの取得
-
SQL GROUPで件数の一番多いレコ...
-
SQL抽出の書き方について(一部...
-
MINUS の結果の rowid を取得し...
-
oracleの分割delete
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select句副問い合わせ 値の個...
-
select insertで複数テーブルか...
-
SELECTの結果で同一行を複数回...
-
MERGE文を単体テーブルに対して...
-
固定値を含む結合と複数テーブ...
-
複数テーブルのMAX値の行データ...
-
他のテーブルを参照した値はupd...
-
unionの結果は集計はできないで...
-
外部結合とor条件混在の記述方法
-
oracleの分割delete
-
SET句内で複数の条件を指定して...
-
SQL GROUPで件数の一番多いレコ...
-
DELETE 文とEXISTSの使い方につ...
-
COUNTの取得方法(?)について...
-
集計後の数値が倍になる
-
SQLの書き方(チェックボックス)
-
unionでマージした副問合せを結合
-
副問い合わせのinsert文
-
結合と副問い合わせの違い
おすすめ情報