我需要通過'near match'加入。解釋這一點的最好辦法是用一個例子:SQL:與'near'匹配加入
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
這裏是挑戰(感謝傑克!): 當SPROC參數@LanguageCode完全匹配時,一切正常。
我希望它也適用於部分匹配;更具體地說:例如說@LanguageCode是'en-NZ',那麼我希望SPROC返回語言代碼'en'的值(因爲'en-NZ'沒有值)。
作爲額外的挑戰:如果根本沒有匹配,我想返回'en'值;例如,如果@LanguageCode是'es',那麼SPROC將返回'en'值(因爲'es'沒有值)。
非常感謝。我不知道「排名功能」。 –