2012-08-31 43 views
0

這是可能的MySQL嗎?mysql:得到一個靜態列與給定的值和另一列與ID如果存在的值

比方說,我有一個表: ID,名稱

現在,我想運行一個查詢,看看這些名字存在「約翰,詹姆斯,比爾」。假設只有名字詹姆斯存在於數據庫(ID:23,名稱:詹姆斯)我希望看到這樣的結果:

ID | Name 
------------ 
null | John 
    23 | James 
null | Bill 

任何想法?

回答

3

您需要一個外連接您的表和某個包含要搜索的名稱列表的表(您可以在運行查詢之前創建這樣的表,或者在查詢中實現這樣的表)如下所示使用UNION)。瞭解有關SQL joins

SELECT * FROM my_table NATURAL RIGHT JOIN (
    SELECT 'John' AS Name UNION ALL SELECT 'James' UNION ALL SELECT 'Bill' 
) t 

請參閱sqlfiddle

+0

確切!謝謝你的答案! (在查詢-last字符「t」有一個小的錯字) – Sharky

+0

@Sharky:這不是一個錯字,它是物化表的假別名。 – eggyal

+0

就像一個魅力。再加上我學到了新的東西。謝謝eggyal – Sharky

0

您可以使用IN()比較函數來檢查WHERE Name IN ('John', 'James', 'Bill')。如果你想返回結果顯示ID的匹配,你可以使用:

SELECT b.ID, a.Name 
FROM sparkles a 
LEFT JOIN (SELECT ID, Name FROM sparkles WHERE Name IN ('John', 'James', 'Bill')) b ON b.ID = a.ID 
+0

不返回所需的結果。 [sqlfiddle](http://sqlfiddle.com/#!2/9925a/1/0)。 – eggyal

+0

@eggyal是的。它找到了一場比賽。請參閱[更新](http://sqlfiddle.com/#!2/9925a/2)。我放棄了'詹姆斯'。 – Kermit

+0

但是,所需的結果集包含三個記錄,每個人被搜索一個。 – eggyal

相關問題