【发布时间】:2021-11-07 09:30:44
【问题描述】:
这可能很简单,但我目前还没有看到。尝试组合左外连接和内连接,以便从给定的一组表中获取任何可用的信息,所有信息都与 customer_id 相关
示例在设计上可能并不完美(我是根据我的实际查询编写的),但足以说明我的问题,即使其中一些表中有行,它也是一个空结果集。
示例表:
简介:
id_profile nm_profile
----------- ----------
1234 User profile
订单:
id_order id_customer order_date order_type
------- ---------- --------- ----------
10308 1234 2017-09-18 Online
10309 1234 2018-09-18 Online
评论:
id_review id_profile id_order text score
--------- ---------- -------- ----- ------
(no rows for this id_profile)
查询:
SELECT c.id_customer, MIN(o.order_date) order_date, r.text review_text
FROM Customer c
JOIN Profile p ON c.id_customer = p.id_profile
LEFT OUTER JOIN Orders o ON o.id_customer = c.id_customer AND o.order_type = 'Online'
LEFT OUTER JOIN Reviews r ON r.id_reviewer = p.id_profile AND r.score = 5
WHERE c.id_customer = 1234
GROUP BY c.id_customer
假设这些列匹配并且我能够运行上述查询,我正在尝试实现以下目标:
id_customer order_date review_text
----------- ---------- -----------
1234 2017-09-18 <NULL>
这是一个更大的查询的一部分;试图将其分解为最基本的表达方式,以了解我可能做错了什么。已尝试避免连接中的 WHERE 子句,还尝试了 LEFT OUTER JOIN (SELECT ....) ,但没有运气。
提前致谢!
【问题讨论】:
-
你写
JOIN Profile p ON c.id_customer = p.id_profile的时候是指JOIN Profile p ON c.id_customer = p.id_customer吗? -
r.text 需要在 GROUP BY 中或者是 SELECT 中聚合函数的一部分
-
@jason44107 我的意思是 id_profile 的值与 id_customer 的值相关(不幸的是,我的真实示例有这些怪癖)编辑示例使其更具可读性,谢谢!
-
您的查询在 TSQL 或 Sybase 中都不起作用,因为
group by子句和select列不一致。此外,您应该只标记您真正使用的数据库。如果有多个评论,你想要什么? -
假设您在
Sybase数据库上运行... Sybase RDBMS 产品(ASE?IQ?SQLAnywhere?Advantage?)和版本?
标签: sql join group-by sybase sybase-ase15