簡體   English   中英

基於MySQL中其他列的查詢條件列

[英]Conditional column for query based on other columns in MySQL

我很確定我已經在某個地方見過這個,但我找不到合適的術語,所以我遇到了麻煩......

假設我有一個包含用戶信息的表(讓我們假設它是由比我更多付費的人創建的,因此修改模式不是一種選擇。)用戶信息的各個列中有DOB和職稱的列。 我想要一個查詢,根據這些列中的內容,將包含一個名為“Real_Title”的額外列,例如:

User_id    Job_Title    DOB
  joe_1      manager    01/01/1950
  jim_1    associate    01/01/1970
 jill_1    associate    01/01/1985
 jane_1      manager    01/01/1975

查詢:

SELECT User_id, Real_Title FROM users
IF (YEAR(DOB) < 1980 AND Job_Title = "manager")
   {Real_Title = "Old Fart"}
ELSE IF (YEAR(DOB) < 1980 AND Job_Title = "associate")
   {Real_Title = "Old Timer"}
ELSE IF (YEAR(DOB) > 1980 AND Job_Title = "manager")
   {Real_Title = "Eager Beaver"}
ELSE IF (YEAR(DOB) > 1980 AND Job_Title = "associate")
   {Real_Title = "Slacker"}

我知道上面的內容不僅錯誤,而且編碼效率也非常低,但我想把這個想法貫穿其中。

有沒有一種方法,不使用連接,根據同一個表中一個或多個其他列中的信息填充列?

目前我在獲取結果后在PHP腳本中使用了一些東西來將這些結果引導到我想要的組中,但如果可以在查詢中完成,那么將查詢移植到其他腳本和語言會更容易。

謝謝!

select User_id
,case 
    when (YEAR(DOB) < 1980 AND Job_Title = "manager")   then 'Old Fart'
    when (YEAR(DOB) < 1980 AND Job_Title = "associate") then 'Old Timer'
    when (YEAR(DOB) > 1980 AND Job_Title = "manager")   then 'Eager Beaver'
    when (YEAR(DOB) > 1980 AND Job_Title = "associate") then 'Slacker'
    else 'nobody'
end
as Real_Title 
from users

如果我理解正確,我認為您正在尋找CASE聲明

SELECT User_id,
        (CASE
            WHEN YEAR(DOB) < 1980 AND Job_Title = "manager" THEN "Old Fart"
            WHEN YEAR(DOB) < 1980 AND Job_Title = "associate" THEN "Old Timer"
            ...
            ELSE "Unknown Title"
        END) AS Real_Title
FROM users;

暫無
暫無

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

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