选择一个强制记录加上几个可选的

时间:2016-01-22 18:24:57

标签: sql select

我想选择一个强制记录加上可选记录(如果存在)。我能够使用这个脚本实现它:

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')

我想知道是否有更好的方法可以做到这一点?

2 个答案:

答案 0 :(得分:2)

我将证明JNevill评论,你的查询相当于一个查询。

让我们想象一下,只有10个用户,id是主键,所以没有重复,一个用户是Id = 1,也是'web developer'

因此,首先查询会为您带来一条记录。

现在,第二个查询将检查所有其余用户(9),以查看谁也是'web developer'

因此,对于这两个查询,您将检查所有10个用户,以查看谁是'web developer'

SELECT user_id 
FROM users 
WHERE title = 'web developer'

注意:

如果id是主键并且您知道的话,那么另一种简化。

为什么SELECT user_id from USERS WHERE user_id = 1 ...如果你知道结果是1

答案 1 :(得分:1)

只是详细说明UNION在&#34; Compulsary&#34; vs&#34;可选&#34;你是来自哪个想法。 (添加为答案,因为它太过冗长而无法发表评论)。如果您需要详细说明选择特定记录的原因,可能会使用UNION All,例如:

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由参数提供,这可能会有所帮助。但即使在这种情况下,您也可以使用单个查询:

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