2016-01-22 43 views
0

我想選擇一個記錄強制加上可選記錄(如果存在)。我可以使用這個腳本來實現它:選擇一個必填記錄加幾個可選

SELECT user_id from USERS 
    WHERE user_id = 1 
    AND title IN ('web developer') 
UNION ALL 
SELECT user_id from USERS 
    WHERE user_id <> 1 
    AND title IN ('web developer') 

我不知道是否有更好的方法來做到這一點?

+1

什麼是可選和必需的? –

+0

user_id = 1的用戶記錄是強制性的,其他記錄是可選的 – koryakinp

+3

此查詢與「SELECT user_id FROM users WHERE title ='web developer''有什麼不同?我不明白你想要做什麼,我不明白你的例子中「強制」和「可選」的意思。請詳細說明。 – JNevill

回答

2

我會證明JNevill的評論,你的querys相當於一個查詢。

讓我們想象一下,只有10個用戶和id是主鍵,所以沒有重複,一個用戶是Id = 1,也是一個'web developer'

所以第一個查詢會給你帶來一個記錄。

現在第二個查詢將檢查所有其他用戶(9)以查看誰也是'web developer'。所以既querys

你會檢查所有10個用戶,看看誰是'web developer'

SELECT user_id 
FROM users 
WHERE title = 'web developer' 

注:

如果id是一個主鍵,你知道的另一種簡化是存在的。

爲什麼SELECT user_id from USERS WHERE user_id = 1 ...如果你知道結果是1

+0

我想你是對的:)我的問題是愚蠢的。 – koryakinp

+0

別擔心,我一直在那裏,有時過分簡單的事情。 –

1

只是爲了闡述其中UNION可能使在「必須放」感覺VS,你是從哪裏來的「可選」的想法。 (作爲回答添加,因爲它太羅嗦了評論)。

SELECT user_id, 'compulsary' as reason from USERS 
    WHERE user_id = 1 
    AND title IN ('web developer') 
UNION ALL 
SELECT user_id, 'optional' from USERS 
    WHERE user_id <> 1 
    AND title IN ('web developer') 

在您的user_id由參數提供的,這可能使一些道理:如果你需要解釋爲何選擇了特定的記錄,比如有可能是爲UNION All的用途。但即使在這種情況下,您也可以使用單個查詢:

SELECT 
    user_id, 
    CASE WHEN user_id = 1 THEN 'compulsary' ELSE 'optional' END as reason 
FROM USERS 
WHERE title IN ('web developer')