2017-01-06 67 views
2

我想知道是否可以从另一个表中查找字符串。这有点复杂。SQL查找字符串

这里的表:(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(并且问题只是用'sql'而不是特定的DBMS产品来标记) –

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感谢您的链接。现在我已经看到了这个更新我的数据库。 – Snowlockk

+0

太棒了。很高兴我能分享一些改进的知识。 :d –