有 2 個表:事件和日期。一個事件可能有多個日期。
我想只選擇那些未來沒有相應日期的事件。
我嘗試了以下查詢
SELECT e.id_event FROM events e RIGHT JOIN dates d ON e.id_event=d.id_event AND !(d.date > NOW())
但它顯示了過去和未來都有日期的事件。
樣本資料
事件表
| id_event |
|---|
| 1 |
| 2 |
日期表
| id_event | 日期 |
|---|---|
| 1 | 2020-10-10 |
| 1 | 2030-10-10 |
| 2 | 2020-10-10 |
查詢應該只回傳一條記錄,id_event = 2。
uj5u.com熱心網友回復:
有幾種方法可以做到這一點
create table t1(id_event int, date date);
insert into t values (1),(2);
insert into t1 values (1,'2020-01-01'),(1,'2030-01-01'),(2,'2020-01-01');
SELECT e.id_event
FROM t e
left JOIN t1 d ON e.id_event=d.id_event
group by e.ID_event having max(d.date) < now()
;
SELECT e.id_event
FROM t e
left JOIN t1 d ON e.id_event=d.id_event
where not exists(select 1 from t1 t2 where t2.id_event = d.id_event and t2.date > now())
;
如果您打算從任一表中獲取更多列,首先可能沒有用。
uj5u.com熱心網友回復:
你可以試試這個查詢(Demo):
SELECT evt.id_event
FROM events evt
WHERE evt.id_event NOT IN (
SELECT e.id_event
FROM events e
INNER JOIN dates d
ON e.id_event=d.id_event
AND d.date > CURDATE()
);
這里,首先找出所有具有未來日期的事件id,然后選擇之前找出的事件id中沒有的事件id。
uj5u.com熱心網友回復:
NOW()是時間戳:你想CURDATE
試試
SELECT e.id_event
FROM events e RIGHT
JOIN dates d
ON e.id_event=d.id_event AND d.date <= CURDATE();
<= CURDATE()在今天之前或包括今天,這與不在未來相同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/428242.html
下一篇:DATAFRAME連接和分割
