2015-07-03 98 views
0

我需要創建一個SQL查詢(MySql),該查詢返回來自「in」子句的最後一行,其基於IN(a,b,c)中的值。爲了簡化問題,下面是一個示例表格,以及我需要查詢的結果。如何選擇匹配選擇的最後一行,其中COL(a,b,c)

For the Table PEOPLE, with values 
LAST_NAME FIRST_NAME 
..... 
Smith  Mike  
Smith  Betty 
Smith  Jane 
Jones  Mike 
Jones  Sally 
.... 

我需要像查詢

SELECT * 
FROM PEOPLE 
WHERE FIRST_NAME = 'Mike' AND LAST_NAME IN ('Smith','Jones') 

返回麥克·瓊斯,像

SELECT * 
FROM PEOPLE 
WHERE FIRST_NAME = 'Mike' AND LAST_NAME IN ('Jones','Smith') 

查詢返回邁克·史密斯

基本上WHERE LAST_NAME IN (....)服務的「重載「功能,其中列表成員可以取代基於ord的結果集中的值呃來自IN (...)條款的成員。

回答

4

可以在ORDER BY子句中使用FIELD

SELECT * 
FROM PEOPLE 
WHERE FIRST_NAME = 'Mike' 
     AND LAST_NAME IN ('Smith','Jones') 
ORDER BY FIELD(LAST_NAME, 'Smith', 'Jones') DESC LIMIT 1; 

只是重複字符串字面值IN,使用相同的順序,裏面FIELD

+0

哇,這是比我想象的要簡單,與限制1總是返回最後一場比賽?這讓我感到驚訝。我打算做一個SELECT DISTINCT FIRST_NAME WHERE LAST_NAME IN(列表),然後對該結果集中的每個FIRST_NAME執行上面的SELECT語句。有沒有簡單的方法將這兩個陳述合併爲一個陳述? –

+0

@MikeStorey「LIMIT 1」返回頂級記錄,即具有最小「FIELD」值的那個記錄,即最左邊的記錄。 –

+0

我需要返回最後一個記錄,有沒有辦法做到這一點,而不必扭轉成員列表....即LIMIT -1什麼的? –

0

giogios的解決方案很好。如果沒有使用限制,這也應該起作用,所以如果你有多個Mike Jones或Mike Smith,你會得到Jones和Mike Smith將會出現的所有結果。如果你的數據庫沒有使用這些字段中的任何一個作爲主鍵,這是不可能的,但不是不可能的。

select * From emp_master 
where FIRST_NAME = 'Mike' 
    And (LAST_NAME = 
      case LAST_NAME 
       when 'jones' then 'jones' 
       when 'Smith' then 'Smith' 
     end) 
0

編輯&試試這個 - 應該給你需要的輸出

SELECT TOP 1 * FROM table_Name ORDER BY unique_column DESC 
相關問題