SQL查找字符串
我想知道是否可以从另一个表中查找字符串。这有点复杂 这是桌子:(待定菜) 从上表中,我想从另一个表中获取有关列dish的单独描述 第二张桌子(tbl_食品) 假设我的查询如下:(但它是错误的) 我期望的结果是:SQL查找字符串,sql,sql-server,Sql,Sql Server,我想知道是否可以从另一个表中查找字符串。这有点复杂 这是桌子:(待定菜) 从上表中,我想从另一个表中获取有关列dish的单独描述 第二张桌子(tbl_食品) 假设我的查询如下:(但它是错误的) 我期望的结果是: | food | Description | | egg | Fresh | | hotdog | red | | bread | toasted | 这就像在dish列中获得所有匹配的单词。我不知道这是否
| food | Description |
| egg | Fresh |
| hotdog | red |
| bread | toasted |
这就像在dish列中获得所有匹配的单词。我不知道这是否可能。请帮忙
谢谢。您需要拆分列表
SELECT food, description
FROM tbl_Foods
join tbl_Dishes
on tbl_Dishes.dish like ('%' + tbl_Foods.food +'%')
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 @Piece=@ParamList
insert @values(RoNum,ParamValue) values (@RoNum,@Piece)
select @ParamList = right(@ParamList,len(@ParamList)-@chrind)
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
类似这样的东西。描述从何而来?它来自tbl_食品。那么您可以添加
tbl_食品的结构吗
请问您使用的是哪种DBMS?并不是说使用+
进行字符串连接是非标准SQL(问题只标记为SQL
而不是特定的DBMS产品)这种类型的分离器绝对是最差的。从性能的角度来看,它是如此糟糕,以至于它甚至没有列出拆分器列表,以便在创建和分析不同类型的人员之间进行比较。这里有一个链接,指向比这个基于循环的版本更好的拆分器。这里增加的性能挑战是多语句表值函数。这些函数几乎总是比标量函数慢。当然还有循环…@SeanLange谢谢你的链接。现在我要更新我的数据库了,我已经看到了。太棒了。很高兴我能分享一些改进方面的知识D
SELECT food, description
FROM tbl_Foods
join tbl_Dishes
on tbl_Dishes.dish like ('%' + tbl_Foods.food +'%')
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 @Piece=@ParamList
insert @values(RoNum,ParamValue) values (@RoNum,@Piece)
select @ParamList = right(@ParamList,len(@ParamList)-@chrind)
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