我想根據以下條件將翻譯表左連接到 table1:如果翻譯表中有瀏覽器語言的專案,請選擇此專案。如果沒有檢查是否有作業系統語言的專案,如果沒有則選擇默認(空)語言。
表格1
| ID | 物品 |
|---|---|
| 0 | 稅 |
| 1 | 費用 |
翻譯
| ID | 物品 | 語 | 文本 |
|---|---|---|---|
| 0 | 稅 | 空值 | 斯圖爾 |
| 1 | 稅 | 德 | 斯圖爾 |
| 2 | 稅 | zh | 稅 |
| 3 | 費用 | 空值 | 格布爾 |
| 4 | 費用 | 德 | 格布爾 |
| 5 | 費用 | zh | 收費 |
SELECT * FROM table1 t1
LEFT JOIN translation t2 ON t1.item = t2.item;
會給我所有的東西,比如:
結果
| ID | 物品 | ID | 物品 | 語 | 文本 |
|---|---|---|---|---|---|
| 0 | 稅 | 3 | 稅 | 空值 | 格布爾 |
| 0 | 稅 | 4 | 稅 | 德 | 格布爾 |
| 0 | 稅 | 5 | 稅 | zh | 收費 |
| 1 | 費用 | 0 | 費用 | 空值 | 斯圖爾 |
| 1 | 費用 | 1 | 費用 | 德 | 斯圖爾 |
| 1 | 費用 | 2 | 費用 | zh | 稅 |
我的方法是使用 CASE 但查詢:
DECLARE @uiLanguage VARCHAR(2) = 'en';
DECLARE @osLanguage VARCHAR(2) = 'de';
SELECT
*
FROM
item t1
LEFT JOIN translation t2 ON t1.item = t2.item
WHERE
t2.language = (CASE
WHEN t2.language = @uiLanguage THEN @uiLanguage
ELSE @osLanguage
END);
給了我這個結果:
結果
| ID | 物品 | ID | 物品 | 語 | 文本 |
|---|---|---|---|---|---|
| 0 | 稅 | 4 | 稅 | 德 | 格布爾 |
| 0 | 稅 | 5 | 稅 | zh | 收費 |
| 1 | 費用 | 1 | 費用 | 德 | 斯圖爾 |
| 1 | 費用 | 2 | 費用 | zh | 稅 |
這就是它應該或需要的:
結果
| ID | 物品 | ID | 物品 | 語 | 文本 |
|---|---|---|---|---|---|
| 0 | 稅 | 5 | 稅 | zh | 收費 |
| 1 | 費用 | 2 | 費用 | zh | 稅 |
uj5u.com熱心網友回復:
您可以多次加入翻譯表,每種語言一次;在 SqlServer 中:
DECLARE @uiLanguage VARCHAR(2) = 'en';
DECLARE @osLanguage VARCHAR(2) = 'de';
SELECT
t1.*,
coalesce(t2_bl.text, t2_ol.text, t2_nl.text) as text
FROM
item t1
LEFT JOIN translation t2_bl ON t1.item = t2_bl.item AND t2_bl.language = @uiLanguage
LEFT JOIN translation t2_ol ON t1.item = t2_ol.item AND t2_ol.language = @osLanguage
LEFT JOIN translation t2_nl ON t1.item = t2_nl.item and t2_nl.language is NULL
;
coalesce取第一個非“空”的“文本”值。這可以通過 case-when ifcoalesce功能不可用來執行。
uj5u.com熱心網友回復:
我懷疑您需要使用相關的子查詢。
例如,在 MS SQL Server 中:
DECLARE @uiLanguage VARCHAR(2) = 'en';
DECLARE @osLanguage VARCHAR(2) = 'de';
SELECT
id,
IsNull(t2.text, t1.text) text
FROM
item t1
OUTER APPLY
(
SELECT TOP 1 text
FROM translation t2
WHERE t2.item = t1.item
AND t2.language IN (@uiLanguage, @osLanguage)
ORDER BY CASE t2.language WHEN @uiLanguage THEN 0 ELSE 1 END
) t2
;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/408276.html
標籤:
