0

我有一个 id 列表,需要检查具有 id 的用户是否在一个 SELECT 中。就像 SELECT WHERE IN ()。但是 SELECT WHERE IN () 不适合我的需要,我需要在一个 SELECT 中区分表中的那些 id 和那些不在表中的 id,而不使用像多个 SELECTS 这样的任何循环。欢迎任何想法!

4

2 回答 2

0

您应该提供更多详细信息。它是单个查询,因此可以将列表硬编码到查询中,还是您想为提供的任何 id 列表找到通用解决方案?你的名单有多长?

对于单个查询并且不是很长的列表,您可以使用联合。例如:

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 中,没有显式联合的这种转换是不可能的。

于 2013-09-13T12:58:50.387 回答
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
于 2013-09-13T11:32:58.390 回答