這可能很簡單,但我目前還沒有看到。試圖結合左外聯接和行內接,以便從一組給定的表中獲取任何可用的資訊,這些資訊都與一個客戶ID有關
。示例在設計上可能并不完美(我是根據我的實際查詢制作的),但應該足以說明我的問題,即盡管這些表中有一些行,但結果集是空的。
示例表:
組態檔:
id_profile nm_profile
----------- ----------
1234 User profile
訂單:
id_order id_customer order_date order_type
------- ---------- --------- ----------
10308 1234 20170918 Online
10309 1234 2018-0918 在線
評論:
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客戶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 20170918 < NULL>
這是一個更大的查詢的一部分;試圖把它分解成最基本的表達方式,以了解我可能做錯了什么。我試圖避免在連接中使用WHERE子句,也嘗試了LEFT OUTER JOIN(SELECT ....),但沒有成功。
預先感謝!
uj5u.com熱心網友回復:
你應該在聚合完成后加入Reviews:
SELECT t.id_customer, t.order_date, r.text review_text
FROM (
SELECT c.id_customer, MIN(o.order_date)order_date
FROM Customer c
INNER JOIN Profile p ON c.id_customer = p.id_profile
LEFT JOIN Orders o ON o.id_customer = c. id_customer AND o.order_type = 'Online'。
WHERE c.id_customer = 1234
GROUP BY c.id_customer
) t
LEFT JOIN Reviews r ON r.id_reviewer = t. id_customer AND r.score = 5;
請看demo.
uj5u.com熱心網友回復:
如果你只想得到所有帶有最大訂單日期的審查資訊,那么你可以匯總orders表并加入其余的資訊:
SELECT c.id_customer, o.min_order_date, r.text as review_text
FROM客戶c JOIN
Profile p ON c.id_customer = p.id_profile LEFT JOIN
(SELECT o.id_customer, MIN(o.order_date) as min_order_date
FROM Orders o
WHERE o.order_type ='Online'
GROUP BY o.id_customer
) o
ON o.id_customer = c.id_customer LEFT JOIN
評論r
ON r.id_reviewer = p.id_profile AND r.score = 5
WHERE c.id_customer = 1234;
如果id_customer有多個評論,這將回傳多行。 你的問題沒有提到如何處理這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/320151.html
標籤:
下一篇:突變以合并R中不同df的最小值
