高效查询 - 查询表 A 中的特定 ID 组时,如何检查表 B 中的条件以查找表 A 中的选定 ID?
Posted
技术标签:
【中文标题】高效查询 - 查询表 A 中的特定 ID 组时,如何检查表 B 中的条件以查找表 A 中的选定 ID?【英文标题】:Efficient Query - When querying a specific group of IDs in Table A, how can I check a condition in Table B for selected id in Table A? 【发布时间】:2013-10-25 22:25:12 【问题描述】:我有一个用户表:| username |
我有一张关系表:| follower | following |
目前,我有一个查询:SELECT username FROM user WHERE username IN ('A', 'B', ...)
现在,当我执行上述查询时,我想检查当前用户是否正在关注每个用户,并以某种方式在结果的另一列中指出它。像这样:SELECT username, is_followed FROM user WHERE username IN ('A', 'B', ...) AND "is_followed is true when username is being followed by 'CURRENT_USERNAME'"
有没有没有foreach循环或子查询的有效方法?
任何答案将不胜感激。
谢谢。
【问题讨论】:
【参考方案1】:从您的描述中您想要什么并不完全清楚。这个查询给出了所有选择的用户和一个标志来说明他们是否被关注。如果您只想要当前用户关注的用户,请将left outer join
更改为inner join
Select
u.username,
case when r.following is null then 0 else 1 end is_followed
From
user u
left outer join
relationship r
on u.username = r.following and r.follower = 'CURRENT_USERNAME'
Where
u.username in ('A', 'B', ...)
这假定关系表中没有重复项。
【讨论】:
【参考方案2】:这个给出了你解释的结果。
SELECT username
,Case When q2.username IS NULL
Then 0
Else 1
END
As is_followed
FROM user q1
LEFT JOIN
(
select Distinct following as username
from relationships
where follower = 'CURRENT_USERNAME'
)q2
on q1.username=q2.username
WHERE q1.username IN ('A', 'B', ...)
【讨论】:
以上是关于高效查询 - 查询表 A 中的特定 ID 组时,如何检查表 B 中的条件以查找表 A 中的选定 ID?的主要内容,如果未能解决你的问题,请参考以下文章