[英]SQL Query direct or inner join
我想從信用記錄中的狀態更改前后的某些日期查找一些客戶。 例如:
我希望表中的每個人在“ date”之前的狀態為“ pending”,並且要從相同的人員列表中,每個人都想標識狀態在“ date2”之后從“ pending”變為“ approved”的客戶列表。 例如
以下是我的表格說明:
我曾嘗試對這兩個表進行直接聯接,但仍不確定是否能找到所有人。 原因是,第二個事務表存儲了每個狀態“狀態”(待定,已批准)和時間。
這兩個表的共同點是:
這將返回具有至少一項交易的客戶列表:
SELECT c.*
FROM CLIENTS c
WHERE EXISTS(SELECT NULL
FROM TRANSACTIONS t
WHERE t.client_id = c.client_id
AND t.status = 'pending'
AND t.transaction_date < 2010-07-25)
AND EXISTS(SELECT NULL
FROM TRANSACTIONS t
WHERE t.client_id = c.client_id
AND t.status = 'approved'
AND t.transaction_date > 2010-08-30)
如果您要計數,請使用:
SELECT COUNT(*)
FROM CLIENTS c
WHERE EXISTS(SELECT NULL
FROM TRANSACTIONS t
WHERE t.client_id = c.client_id
AND t.status = 'pending'
AND t.transaction_date < 2010-07-25)
AND EXISTS(SELECT NULL
FROM TRANSACTIONS t
WHERE t.client_id = c.client_id
AND t.status = 'approved'
AND t.transaction_date > 2010-08-30)
我不使用JOIN的原因是,對於符合條件的每個事務記錄,該結果集將重復結果集中的行-您需要使用DISTINCT
或GROUP BY
來消除重復項。 如果存在一個或多個匹配條件的實例,並且在結果集中不重復,則EXIST將返回true。
假設您不會從“已批准”返回到“待處理”,則可以使用子查詢來做到這一點:
從table2 t2的內部表中選擇* * t2.client_id = t1.client_id,其中t2.client_id在其中(從table2 t3中選擇不同的t3.client_id,其中t3.status ='Pending'和t3.date <'2010/07/25 ')和t2.status ='已批准',並且t2.date>'2010/07/30'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.