我正在寻找对所有艺术家感兴趣的客户的客户名称。
据我所知,在关系代数中,我可以使用除法运算符,但是我不明白SQL格式。
我有这些表格的列:
customer (customerID, firstname, lastname)
artist (artistID)
customer_interest_in_artists (artistID, customerID)
我将如何做到这一点?
答案 0 :(得分:0)
您可以使用简单的MIN()
构造执行此操作:
SELECT c.firstname, c.lastname, MIN(ci.customerID IS NOT NULL) AS interest_all
FROM artist
LEFT JOIN customer_interest_in_artists ci USING (artistID)
LEFT JOIN customer c USING (customerID)
GROUP BY c.customerID
HAVING interest_all = 1
答案 1 :(得分:0)
你可以:
或
第一个选项os可能最容易实现,因为您已经可以获得每个客户的行数(提示:join,count(*)和group),并将每个客户的数量与艺术家中的行数进行比较 - 提示:有count(*)=(子查询)
答案 2 :(得分:0)
对于ORACLE,我用这个...... 但我不认为我的答案是最优雅的,无论如何,这就是它!
SELECT c.FIRSTNAME, c.LASTNAME, c.CUSTOMERID
FROM DTOOHEY.CUSTOMER c, DTOOHEY.CUSTOMER_ARTIST_INT cai
WHERE c.CUSTOMERID = cai.CUSTOMERID
AND c.CUSTOMERID IN
(SELECT cai.CUSTOMERID
FROM DTOOHEY.CUSTOMER_ARTIST_INT cai
GROUP BY cai.CUSTOMERID
HAVING COUNT (*) = (SELECT COUNT (*) FROM DTOOHEY.ARTIST)
)
GROUP BY c.FIRSTNAME, c.LASTNAME, c.CUSTOMERID;
根据我的有限知识,命令流程是:
1)我正在尝试获取客户ID,客户的名字和姓氏
2)我从2个表(cai和c)中得到它
3)尝试加入2个表来给我一个数据集
4)c.customerid将聚集在......
这就是魔术开始的地方!
5)选择customerID(单个CustomerID)
6)从这张表蔡
7)根据customerID对结果进行分组,这就是您需要的单个CustomerID值...
8)具有COUNT(*) - 具有customerID值的计数,与dtoohey.artist表中的艺术家数量相等。
主要逻辑是艺术家表中的艺术家数量(即11),存在于CUSTOMER_ARTIST_INT中的数量相同。因此,我们可以将计数结果从ARTIST表统计到CUSTOMER_ARTIST_INT表中。
答案 3 :(得分:-1)
我认为这些对您有用
SELECT a.customerID, c.artistID from customer a
join customer_interest_in_artists b on a.customerID = b. customerID
join artist c on c.artistID = b.artistID
谢谢。