要求:列出经常光顾同一家酒吧的顾客对(即列出可能在咖啡馆遇到的所有顾客对)
吧台:
-------------------------
id| name
-------------------------
1 | Vivamus nibh
2 | odio tristique
3 | vulputate ullamcorper
4 | Cras lorem
5 | libero est,
客户表:
-----------------------
id| name
-----------------------
1 | Warren
2 | Olympia
3 | Logan
4 | Summer
5 | Kamal
6 | Fernandez
频率表:
-----------------
cust_id | bar_id
-----------------
1 | 1
2 | 1
3 | 2
4 | 2
5 | 3
6 | 4
预期输出:
---------------------------------------
customer1 | customer2 | barname
---------------------------------------
Warren | Olympia | Vivamus nibh
Logan | Summer | odio tristique
这是我的尝试,但没有成功:
select c1.name, c2.name, b1.name, b2.name
from frequents f1, frequents f2
join bar b1 on f1.bar_id = b1.id
join bar b2 on f2.bar_id = b2.id
join customer c1 on f1.cust_id = c1.id
join customer c2 on f2.cust_id = c2.id
where f1.bar_id = f2.bar_id;
3条答案
按热度按时间iqjalb3h1#
您可以将bar表与frequent表联接两次,然后继续联接以获得客户名称。为了防止重复,您可以任意决定
cust_id
应小于另一个:D小提琴
m2xkgtsf2#
为了得到每个酒吧的所有配对,自连接frequents表可以得到这个结果。
然后,您就可以在其他表的id上加入它们来获得名称。
SQLFIDLE测试
ckocjqey3#
我使用一个子查询来连接具有相同条但不同客户的频繁客户,还通过使用>来使用“排序”客户id以避免重复
分贝小提琴:https://www.db-fiddle.com/f/npynegjadh4ypa6nqbiqot/1