簡體   English   中英

MySQL使用INNER JOIN和CASE WHEN在INNER JOIN中進行選擇

[英]MySQL select with INNER JOIN and CASE WHEN in INNER JOIN

我有一個字符數據庫。 由於不僅要使用字符名稱,還必須將名稱與字符分開。 由於存在MaleFemale角色,因此將它們保留在不同的表中:

tbl_player,tbl_maleName,tbl_femaleName

在我的MySQL Select查詢中,我想根據其性別選擇帶有INNER JOIN的正確表。 所以是這樣的:(SQL查詢是錯誤的,不起作用:()

 SELECT tbl_player.id, 
(CASE tbl_player.gender
    WHEN 'm' THEN tbl_maleName.name
    WHEN 'f' THEN tbl_femaleName.name
END) as gamerName
, tbl_player.gender
FROM tbl_player
INNER JOIN
(CASE tbl_player.gender
    WHEN 'm' THEN tbl_maleName ON tbl_player.gamerName = tbl_maleName.id
    WHEN 'f' THEN tbl_femaleName ON tbl_player.gamerName = tbl_femaleName.id
 END)

提前致謝!

為什么您選擇使用2個表作為我不確定的名稱,但我不建議這樣做。

但是,請嘗試以下操作:

SELECT
      tbl_player.id
    , (CASE tbl_player.gender WHEN 'm' THEN tbl_maleName.name WHEN 'f' THEN tbl_femaleName.name END) AS gamerName
    , tbl_player.gender
FROM tbl_player
      LEFT JOIN tbl_maleName ON tbl_player.gamerName = tbl_maleName.id
                  AND tbl_player.gender = 'm'
      LEFT JOIN tbl_femaleName ON tbl_player.gamerName = tbl_femaleName.id
                  AND tbl_player.gender = 'f'

您需要使用Union並創建一個值為tableOption的默認值:

SELECT tbl_player.id FROM tbl_player LEFT JOIN 
(
(SELECT 'male' as tableOption, name FROM tbl_maleName)
UNION
(SELECT 'female' as tableOption, name FROM tbl_femaleName)
) as gamerName 

ON gamerName.this = tbl_player.that
WHERE gamerName.tableOption = 'female' 

如果值為女性,則將選擇第二個表的值。

暫無
暫無

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

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