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

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

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

SQLで特定の文字をr含まないレコードの取り出しについて

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

■95729 / inTopicNo.1)  SQLで特定の文字をr含まないレコードの取り出しについて
  
□投稿者/ SQL学習中 (1回)-(2020/09/10(Thu) 12:48:43)

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

お世話になっております。

現在SQLを勉強中なのですが、下記の用に「県列内と住所列内のデータが違う」及び「県列内データが住所列内のデータに含まれない」
データを抽出したい場合どのように記載すればよろしいのでしょうか。

[抽出元データ]
氏名 県 住所
A 東京都 東京都
B 東京都 新宿区
C 東京都 東京都新宿区
D 東京都 東京都
E 東京都 渋谷区
F 東京都 東京都渋谷区
G 神奈川県 神奈川県
H 神奈川県 横浜市
I 神奈川県 神奈川県横浜市

[抽出後データ]
氏名 県 住所
B 東京都 新宿区
E 東京都 渋谷区
H 神奈川県 横浜市

WHERE ((県 <> 住所) AND (住所 NOT LIKE 県))
上記のような感じで記入してみたのですがうまくいきませんでした。
お手数おかけしますが、ご存知の方がおりましたらご教授願います。
引用返信 編集キー/
■95730 / inTopicNo.2)  Re[1]: SQLで特定の文字をr含まないレコードの取り出しについて
□投稿者/ 魔界の仮面弁士 (2831回)-(2020/09/10(Thu) 13:09:41)
No95729 (SQL学習中 さん) に返信
> 下記の用に「県列内と住所列内のデータが違う」及び「県列内データが住所列内のデータに含まれない」
用 ⇒ 様/樣 というのはさておき。

ここでいう「及び」というのは、AND の意味ですか? OR の意味ですか?
それによって条件も変わってくるかと。

a) 県 = 住所 だった場合、住所内に県が含まれていることは明確。
b) 県 ≠ 住所 だった場合、住所内に県が含まれていることもあれば、含まれていない事もある。
c) 住所内に県が含まれていない場合、県≠住所であることが明確。
d) 住所内に県が含まれていた場合、県=住所かもしれないし、県≠住所かも知れない。


> WHERE ((県 <> 住所) AND (住所 NOT LIKE 県))

LIKE の方は、ワイルドカード指定(%)が無いと、<> と同じ意味になってしまうような。



> C 東京都 東京都新宿区
> D 東京都 東京都

県に「京都府」「京都」といった揺れは無いでしょうか。
都道府県が付与されていない場合、
 1: 東京都  東京都西東京市
 2: 東京都  西東京市
 3: 東京   東京都西東京市
 4: 東京   西東京市
をどう扱うかという問題が生まれます。

https://uub.jp/zat/todofukenmei.html
https://uub.jp/zat/todofukenmoji.html
引用返信 編集キー/
■95731 / inTopicNo.3)  Re[2]: SQLで特定の文字をr含まないレコードの取り出しについて
□投稿者/ SQL学習中 (2回)-(2020/09/10(Thu) 13:29:59)
No95730 (魔界の仮面弁士 さん) に返信

ご回答ありがとうございます。
ご質問内容の回答になります。
情報不足で申し訳ございません。

> ここでいう「及び」というのは、AND の意味ですか? OR の意味ですか?
> それによって条件も変わってくるかと。
>
> a) 県 = 住所 だった場合、住所内に県が含まれていることは明確。
> b) 県 ≠ 住所 だった場合、住所内に県が含まれていることもあれば、含まれていない事もある。
> c) 住所内に県が含まれていない場合、県≠住所であることが明確。
> d) 住所内に県が含まれていた場合、県=住所かもしれないし、県≠住所かも知れない。
⇒ANDの意味になります。
 住所内に記載するパターンは下記の3通りを想定しております。
  ・都道府県のみ記載
  ・都道府県を除く住所を記載
  ・都道府県を含む住所を記載
 「都道府県を除く住所を記載」したデータを抽出したいと考えております。

>
>>WHERE ((県 <> 住所) AND (住所 NOT LIKE 県))
>
> LIKE の方は、ワイルドカード指定(%)が無いと、<> と同じ意味になってしまうような。
⇒抽出件数が変わっていなかったため、正常に動作していないとは理解できておりましたが、
 「<> と同じ意味」になるとは知りませんでした。


>>C 東京都 東京都新宿区
>>D 東京都 東京都
>
> 県に「京都府」「京都」といった揺れは無いでしょうか。
> 都道府県が付与されていない場合、
>  1: 東京都  東京都西東京市
>  2: 東京都  西東京市
>  3: 東京   東京都西東京市
>  4: 東京   西東京市
> をどう扱うかという問題が生まれます。
⇒県列には47都道府県の名称のみが入ります。(○○県みたいな記載が必須)

以上、よろしくお願いいたします。
引用返信 編集キー/
■95732 / inTopicNo.4)  Re[3]: SQLで特定の文字をr含まないレコードの取り出しについて
□投稿者/ 魔界の仮面弁士 (2832回)-(2020/09/10(Thu) 14:40:16)
No95731 (SQL学習中 さん) に返信
> ⇒県列には47都道府県の名称のみが入ります。(○○県みたいな記載が必須)
県 および 住所ともに、NOT NULL であるという前提ですよね。

> 「都道府県を除く住所を記載」したデータを抽出したいと考えております。
住所に都道府県が記載される場合、空白等を伴うことなく、
必ず「先頭」に付与される、という事で良いでしょうか?

また、県や住所は VARCHAR でしょうか、NVARCHAR でしょうか。
とりあえず、両方とも NVARCHAR であると仮定するとこんな感じ。


[SQL Server の場合]
WHERE NOT 住所 NOT LIKE 県 + N'%'

[Oracle Database の場合]
WHERE NOT 住所 NOT LIKE 県 || N'%'



注:'%' を含む文字列で LIKE 検索したいような場合は、ESCAPE 句の併用も必要です。(今回は使わずに済みそうですが)
引用返信 編集キー/
■95733 / inTopicNo.5)  Re[4]: SQLで特定の文字をr含まないレコードの取り出しについて
□投稿者/ SQL学習中 (3回)-(2020/09/10(Thu) 15:22:36)
No95732 (魔界の仮面弁士 さん) に返信

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

>>⇒県列には47都道府県の名称のみが入ります。(○○県みたいな記載が必須)
> 県 および 住所ともに、NOT NULL であるという前提ですよね。
>
>>「都道府県を除く住所を記載」したデータを抽出したいと考えております。
> 住所に都道府県が記載される場合、空白等を伴うことなく、
> 必ず「先頭」に付与される、という事で良いでしょうか?
>
> また、県や住所は VARCHAR でしょうか、NVARCHAR でしょうか。
> とりあえず、両方とも NVARCHAR であると仮定するとこんな感じ。
⇒何度も情報不足が発生してしまい、申し訳ございません。
 記載された内容で問題ございません。

>
> [SQL Server の場合]
> WHERE NOT 住所 NOT LIKE 県 + N'%'
>
> [Oracle Database の場合]
> WHERE NOT 住所 NOT LIKE 県 || N'%'

> 注:'%' を含む文字列で LIKE 検索したいような場合は、ESCAPE 句の併用も必要です。(今回は使わずに済みそうですが)
⇒上記にて記載された条件分にて想定したデータの出力が無事に成功いたしました。

 今後ご質問する場合は、もう少し詳しく情報を載せたいと思います。
 
 魔界の仮面弁士様ありがとうございました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ