我想选择一个强制记录加上可选记录(如果存在)。我能够使用这个脚本实现它:
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')
我想知道是否有更好的方法可以做到这一点?
答案 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')