簡體   English   中英

sql 依賴於其他表的每個值的查詢

[英]sql query that depends on each value of other table

我不習慣查詢句子,這個有點棘手,我不知道是否可能(至少只有一個 sql 查詢)或者我是否應該將問題名稱更改為更准確的名稱,如果所以讓我知道。

我有兩張桌子,我會讓它們變得簡單。 第一個關於游戲的有一個名稱和一個details_id ,另一個關於游戲細節的有details_id (外鍵), localedescription

游戲
名稱
詳細信息_id
細節
詳細信息_id
語言環境
描述

一個游戲可以關聯多個詳細信息,因為details_id不是唯一的。 所以我可以有 3 個具有相同 id 的詳細信息表與一個游戲相關聯,但是沒有與其他游戲具有相同details_id的游戲。 我舉個例子:

游戲

名稱 詳細信息_id
馬里奧卡丁車 007

細節

詳細信息_id 語言環境 描述
007 英文 一款不錯的賽車游戲。
詳細信息_id 語言環境 描述
007 es-ES Un buen juego de carreras。

我在視圖中顯示了所有游戲及其英文描述,它們現在按描述排序如下:

SELECT Games.name, Details.description 
FROM Games 
  INNER JOIN Details ON Details.locale='en-GB'

訣竅是我希望它取決於語言環境,它們可能是未翻譯成與其他語言環境相同的游戲。

目標是一個 select ,通過連接,可以 select 所有游戲名稱和詳細描述按description排序,其中語言環境為es-ES ,如果詳細信息不存在,它將采用en-GB仍然按字母順序在西班牙語中排序說明。

在這里我添加了第二個只有英文描述的游戲。 我們兩次連接到詳細信息表,一次提取英語描述,一次提取西班牙語描述。 我們使用 function COALESCE,它返回第一個不是 null 的值,即。 如果有西班牙文,如果沒有西班牙文,則英文。
請查看底部的 dbFiddle 鏈接以了解架構並進一步測試。

 select * from games; select * from details;
 姓名 |  details_id:------------ |  --------:馬里奧卡丁車 |  7 忍者之戰 |  5 詳細信息_id | 語言環境 | 描述 ----------: |:----- |:------------------------ 7 |  zh-CN | 一款不錯的賽車游戲。  7 |  es-ES |  Un buen juego de carreras。  5 |  zh-CN | 街頭格斗游戲。
 select name, coalesce(esp.description, eng.description) Description from games g left join (select details_id, description from details where locale = 'en-GB') eng on g.details_id = eng.details_id left join (select details_id, description from details where locale = 'es-ES') esp on g.details_id = esp.details_id
 姓名 | 描述:------------ |:------------------------ 馬里奧卡丁車 |  Un buen juego de carreras。 忍者之戰 | 街頭格斗游戲。

db<> 在這里擺弄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM