2017-12-14 19 views
1

私は、パス列とクライアント列を持つテーブルを持っています。パスのどこにもクライアントNoが見つからない行を探したい。パスに特定の番号が含まれていないすべてのパスを見つけるにはどうすればよいですか?

表の列:

パス

Z:_IMANAGE READ ONLY \ 47640から001 - 002 - ブルーバッファロー社\ 47640.001 - ブルーバッファロー\ Eメールの対応\内部\ 2766005.1-RE- Invoices.MSG

Client 47640

select Path, Client, Matter 
from DocData 
where Imported = 'Y' 
    and Path Not Like '%' + (select top 1 cast(Client as nvarchar(10)) from DocData) + '%' 
+1

ここでは、ほとんどの人が画像ではなく書式付きのテキストを必要としています。 – jarlh

+1

使用しているDBMSにタグを付けます。そのクエリは製品固有のものです。 – jarlh

+1

サブクエリのポイントは何ですか? SQL Serverを使用していますか? –

答えて

4

私はあなたがサブクエリを使用している理由は、次のように動作するはずです理解していない:私はこれまで持っていMatter 1

クエリが完全に正常に動作している

select Path, Client, Matter 
from DocData 
where Imported = 'Y' 
    and Path Not Like '%' + cast(Client as nvarchar(10)) + '%' 
+0

ありがとうございます。それはうまくいった。私は疲れていなければならない。私はそれをひどく複雑にしています。 –

1

、あなたはあなたのミスを持っていますncarcharnvarchar(それはうまくいくでしょう)

私はあなた自身を使用しませんが間違っていない場合でもクエリ。あなたが必要とする価値を返すことはありません。

は、代わりにサブクエリ

を変更せずに短縮されたクエリを使用するには、次の

select Path, Client, Matter 
from DocData 
where Imported = 'Y' 
    and Path Not Like '%' + (select top 1 cast(Client as ncarchar(10)) from DocData) + '%' 

select Path, Client, Matter 
from DocData 
where Imported = 'Y' 
    and Path Not Like '%' + (select top 1 cast(Client as nvarchar(10)) from DocData) + '%' 

(あなたは、エラーを修正したい場合)コルサブクエリ

(トップ1サブクエリ(独自のクエリ)を使用すると、あなたがに比較されている行を知っていることはありません)

select Path, Client, Matter 
from DocData 
where Imported = 'Y' 
    and Path Not Like '%' + cast(Client as nvarchar(10)) + '%' 
+0

ありがとうございます。タイプミスに加えて、誰かが私がサブクエリを必要としないと指摘しました。 –

+1

"サブクエリには実際の余分な値はありません"という意味で、値を追加するだけでなく、明らかに間違っています。 'top 1'サブクエリを使うと、あなたは比較している行を決して知ることができません。 – HoneyBadger

+1

は、サブクエリを使用するべきではありません。 – WhatsThePoint

1

のない電気ショック療法クエリがCHARINDEX()機能を使用してみてください。

CREATE TABLE TestPath 
(
[Path] Nvarchar(100), 
[Id] int, 
Matter bit 
) 

Insert INTO TestPath 
Values 
('C:\Test\SQL_Query\47641_001_Blue_Red',47641,1), 
('C:\Test\SQL_Query\47642_001_Blue_Red',47642,1), 
('C:\Test\SQL_Query\47643_001_Blue_Red',47643,1), 
('C:\Test\SQL_Query\47646_001_Blue_Red',47644,1), 
('C:\Test\SQL_Query\47649_001_Blue_Red',47645,1) 

select [Path], id, Matter 
from TestPath 
where CHARINDEX(Cast(Id as Varchar(10)),[Path])<>0 

これにより、目的の結果が得られます。

+0

ありがとう。これもうまくいった。 パス、クライアント、マテリアルを選択 DocDataから Charindex(キャスト(クライアントとしてのNVarchar(10))、パス、0)= 0 \tおよびインポート済み= 'Y' –

関連する問題