gpt4 book ai didi

SQL: JOIN 与 'near' 匹配

转载 作者:行者123 更新时间:2023-12-04 22:41:30 25 4
gpt4 key购买 nike

我需要进行一个“接近匹配”的 JOIN。最好的解释方法是举个例子:

CREATE TABLE Car
(
Vin int,
Make nvarchar(50),
ColorID int,
)

CREATE TABLE Color
(
ColorID int,
ColorCode nvarchar(10)
)

CREATE TABLE ColorName
(
ColorID int,
Languagecode varchar(12),
ColorName nvarchar(50)
)

INSERT INTO Color Values (1, 'RED CODE')
INSERT INTO Color Values (2, 'GREEN CODE')
INSERT INTO Color Values (3, 'BLUE CODE')

INSERT INTO ColorName Values (1, 'en', 'Red')
INSERT INTO ColorName Values (1, 'en-US', 'Red, my friend')
INSERT INTO ColorName Values (1, 'en-GB', 'Red, my dear')
INSERT INTO ColorName Values (1, 'en-AU', 'Red, mate')
INSERT INTO ColorName Values (1, 'fr', 'Rouge')
INSERT INTO ColorName Values (1, 'fr-BE', 'Rouge, mon ami')
INSERT INTO ColorName Values (1, 'fr-CA', 'Rouge, mon chum')

INSERT INTO Car Values (123, 'Honda', 1)

存储过程看起来像这样:

DECLARE @LanguageCode varchar(12) = 'en-US'

SELECT * FROM Car A
JOIN Color B ON (A.ColorID = B.ColorID)
LEFT JOIN ColorName C ON (B.ColorID = C.ColorID AND C.LanguageCode = @LanguageCode)

参见 http://sqlfiddle.com/#!6/ac24d/24 (感谢 jack !)

挑战如下:当 SPROC 参数 @LanguageCode 完全匹配时,一切都很好。

我希望它也适用于部分匹配;更具体地说:例如说@LanguageCode 将是“en-NZ”,那么我希望 SPROC 返回语言代码“en”的值(因为“en-NZ”没有值)。

作为一个额外的挑战:如果根本没有匹配项,我想返回 'en' 值;例如,如果 @LanguageCode 为“es”,则 SPROC 将返回“en”值(因为“es”没有值)。

最佳答案

尝试 left(@LanguageCode, 2) + '%'

http://sqlfiddle.com/#!6/ac24d/26

关于第二部分 - 无论如何你必须查询表两次(你可以在一个语句中完成,但如果将两个语句合二为一)。您也可以将数据插入临时(或变量)表,检查是否没有行,然后进行另一个查询

我用表函数做了一个查询

http://sqlfiddle.com/#!6/b7be3/5

所以你可以写

DECLARE @LanguageCode varchar(12) = 'es'

if not exists (select * from sf_test(@LanguageCode))
select * from sf_test('en')
else
select * from sf_test(@LanguageCode)

你也可以写

declare @temp table
(
Vin int,
Make nvarchar(50),
ColorCode nvarchar(10)
)

insert into @temp
select * from sf_test(@LanguageCode)

if not exists (select * from @temp)
select * from sf_test('en')
else
select * from @temp

关于SQL: JOIN 与 'near' 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12989945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com