首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL语句翻译

SQL语句翻译
EN

Stack Overflow用户
提问于 2013-02-26 12:50:09
回答 2查看 114关注 0票数 1

我对SQL很陌生,这是我第一次尝试将这种语句转换为SQL。

找那些经常喝啤酒的人约翰史密斯喜欢的酒吧

我有三张表格来回答这个问题:

代码语言:javascript
运行
复制
FREQUENTS(DRINKER, BAR) 
SERVES(BAR, BEER) 
LIKES(DRINKER, BEER)

这是我失败的方法:

代码语言:javascript
运行
复制
SELECT DISTINCT F1.DRINKER
FROM FREQUENTS F1
WHERE F1.DRINKER<>'John Smith'
AND   F1.DRINKER NOT IN(SELECT F2.DRINKER
                        FROM FREQUENTS F2
                    WHERE F2.BAR NOT IN (SELECT S.BAR 
                                        FROM SERVES S, LIKES L
                                        WHERE L.DRINKER='John Smith'
                                        AND S.BEER=L.BEER
                                        AND L.DRINKER=F2.DRINKER))

有人能帮我想办法解决吗?

EN

回答 2

Stack Overflow用户

发布于 2013-02-26 12:56:31

尝试这个查询

代码语言:javascript
运行
复制
SELECT DISTINCT F1.DRINKER
FROM FREQUENTS F1 
WHERE F1.BAR IN (SELECT S.BAR FROM SERVES S, LIKES L
                                    WHERE L.DRINKER='John Smith'
                                    AND S.BEER=L.BEER)

我已经删除了您创建的额外子查询。

票数 1
EN

Stack Overflow用户

发布于 2013-02-26 13:43:57

好的,我知道了。它不太优雅,如果数据在执行此代码期间被更新,那么这可能无法工作,但如下所示

代码语言:javascript
运行
复制
DECLARE @bars TABLE (bar nvarchar(max))
DECLARE @drinkers TABLE (drinker nvarchar(max))
DECLARE @drinkerCounts TABLE (count int, drinker nvarchar(max))
DECLARE @barCount int

insert into @bars
select distinct bar from serves where beer in
(select beer from likes where drinker = 'John Smith')

select @barCount = COUNT(*) from @bars

insert into @drinkers
select drinker from frequents f
inner join @bars b on f.bar = b.bar
where drinker <> 'John Smith'

insert into @drinkerCounts
select count(drinker), drinker
from @drinkers
group by drinker

select * from @drinkerCounts dc
where dc.Count = @barCount
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15089566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档