我有一个id列表,需要在一个SELECT中检查具有id的用户是否在DB中。像SELECT WHERE IN()一样。但是SELECT WHERE IN()不适合我的需要,我需要在一个SELECT中区分表中的那些id和那些不使用任何循环(如多个SELECTS)的id。欢迎任何想法!
答案 0 :(得分:0)
我不确定这是否是您所需要的,但我猜您有表1,其中包含很多ID,您希望看到哪些出现在表2中,哪些出现?
select T1.ID, count(*) 'Times of occurrences in T2'
from table 1 T1
left outer join table 2 T2
ON T1.ID = T2.ID
group by T1.ID
答案 1 :(得分:0)
您应该提供更多详细信息。它是一个单一的查询,所以列表可以硬编码到查询中,或者你想找到任何提供的id列表的通用解决方案?你的名单有多长?
对于单个查询而不是很长的列表,您可以使用union。例如:
SELECT some_value, EXISTS( SELECT 1 FROM tableName WHERE user_id = some_value )
UNION ALL
SELECT other_value, EXISTS( SELECT 1 FROM tableName WHERE user_id = other_value )
UNION ALL
SELECT other_value2, EXISTS( SELECT 1 FROM tableName WHERE user_id = other_value2 )
UNION ALL
.....
如果您的ID列表可能有所不同和/或由数千条记录组成,那么这是不可能的。在列表中,您具有列式布局,并且您希望将其更改为行级结果。在MsSQL中有PIVOT,UNPIVOT子句可以做到这一点。在MySQL中,没有显式联合的转换是不可能的。