例如,我們有 2 個表:
TABLE users WITH FIELDS
id
TABLE providers WITH FIELDS
id
TABLE subscriptions WITH FIELDS
id
start_date
provider_id - OneToMany
user_id - OneToMany
以及以下 sql 陳述句:
SELECT subscription.id
FROM subscriptions
INNER JOIN providers ON
subscriptions.provider_id = providers.id AND
providers.id = 2
INNER JOIN (
SELECT user_id, MAX(start_date) AS start_date
FROM subscriptions GROUP BY user_id
) AS max USING (user_id, start_date)
結果,我想為每個用戶獲取其提供者(在本例中)為 2 且具有最新start_date的訂閱。在這種情況下,我們使用2 但該值是動態的。provider_id
我希望第二個 INNER JOIN 中的 MAX 只接受零售商為 2 的訂閱,但事實并非如此,它接受所有訂閱。為什么?
提前致謝。
uj5u.com熱心網友回復:
問:我希望第二個 INNER JOIN 中的 MAX 只接受零售商為 2 的訂閱,但事實并非如此,它接受所有訂閱。為什么?
這個帶有 MAX 的子查詢是獨立的。如果您將其作為獨立查詢執行:
SELECT user_id, MAX(start_date) AS start_date
FROM subscriptions GROUP BY user_id
那么你會期望它回傳每個user_id帶有它的max(start_date),獨立于provider_id欄位,因為它從未在該查詢中提到過。
當它在更大的查詢中作為子查詢運行時,它回傳完全相同的結果。
您可以將條件添加WHERE provider_id=2到該子查詢中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/389446.html
標籤:sql PostgreSQL的 加入 内部联接
