2017-01-06 16 views
2

文字列を見つけることが別のテーブルから行えるかどうかを知りたいと思います。それは少し複雑です。ここでSQL Find String

はテーブルです:上記の表から、(tbl_dishes)

| dish    | Type  | 
| egg, hotdog & bread | Breakfast | 

が、私は(tbl_Foods)別のテーブルから

第二表の列皿の個々の説明を取得したい

| food | Description | 
| egg | Fresh  | 
| hotdog | red   | 
| bread | toasted  | 
| steak | meat  | 

私のクエリは次のようになります:(間違っています)

SELECT food, description FROM tbl_Foods 
    WHERE food Exists IN (SELECT dish FROM tbl_Dishes) 

私の望ましい結果は次のようになります。

| food | Description | 
    | egg | Fresh  | 
    | hotdog | red   | 
    | bread | toasted  | 

それは皿の列に一致するすべての単語を得るようなものです。それが可能かどうかわかりません。助けてください。

ありがとうございます。

+0

ここで*説明*は何ですか? – Stephen

+0

それはtbl_Foodsから来ました。 – SyntaxError

+0

次に 'tbl_Foods'の構造体を追加できますか – Stephen

答えて

3
SELECT food, description 
FROM tbl_Foods 
join tbl_Dishes 
on tbl_Dishes.dish like ('%' + tbl_Foods.food +'%') 
+0

文字列の連結に '+'を使用するのは非標準SQLではありません。質問には特定のDBMS製品ではなく 'sql'タグが付けられます。 –

0

あなたはリスト

DECLARE @DelimString VARCHAR(100) 
SET DelimString = SELECT REPLACE(REPLACE(dish,'&',','),' ', '') FROM tbl_Dishes 

DECLARE @Dish TABLE (Dish VARCHAR(50)); INSERT INTO @Dish SELECT CAST(ParamValue AS VARCHAR) FROM MultiValueParams_String(@DelimString) 

この機能を使用するを分割する必要があります。

Create function [dbo].[MultiValueParams_String] (@ParamList varchar(4000)) 
returns @Values table (RoNum INT,ParamValue varchar(4000)) 
as 
begin 
declare @Delim char(1) = ',' -- comma is always the delimiter 
declare @Chrind int = 1 
declare @Piece nvarchar(50) 
declare @RoNum int = 0 
while @Chrind>0 
    begin 
     select @Chrind=charindex(@Delim,@ParamList) 
     if @Chrind>0 
      select @Piece=left(@ParamList,@chrind-1) 
     else 
      select @[email protected] 
     insert @values(RoNum,ParamValue) values (@RoNum,@Piece) 
     select @ParamList = right(@ParamList,len(@ParamList)[email protected]) 
     if len(@ParamList)=0 break 
     SELECT @RoNum = @RoNum + 1 
    end 
return 
end 

SELECT food, description 
FROM tbl_Foods f 
INNER JOIN @Dish d ON f.food = d.dish 

このようなものです。

+0

このタイプのスプリッタは絶対的に最悪です。パフォーマンスの観点からは、異なるタイプを作成し分析した人々の間で比較のためのスプリッタのリストを作成することさえありません。ここには、このループベースのバージョンよりはるかに優れたスプリッターへのリンクがあります。 http://sqlperformance.com/2012/07/t-sql-queries/split-stringsここでのパフォーマンス上の課題の追加は、マルチステートメントテーブル値関数です。これらはスカラー関数よりもほとんど常に遅いです。そしてもちろんループしています... –

+0

@SeanLangeはリンクに感謝します。私はこれを見てきたので、私のDBを更新しようとしています。 – Snowlockk

+0

私は改善のための知識を共有することができてうれしいです。 :D –