2016-01-22 39 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')