[英]MySQL left join and select
我有兩個表,mytable1和mytable2。 我從mytable1獲得結果,並與mytable2保持連接。
CREATE TABLE mytable1
( userid int,
type int,
datetime1 DATETIME );
CREATE TABLE mytable2
( userid int,
name varchar(20),
day2 DATE,
time2 TIME );
SELECT x.*, d.name, d.day2, d.time2
FROM ( SELECT * FROM mytable1 WHERE TYPE=1 ORDER BY userid ASC LIMIT 0,50) x
LEFT JOIN mytable2 d
ON x.userid = d.userid
但是我需要過濾結果,因此,如果“ mytable2.day2 mytable2.time2”大於2天前,我將僅獲得結果。 例如,讓datetime為“ 2014.03.27 21:00:00”。 如果mytable2記錄比“ 2014.03.27 21:00:00”新,我將得到結果
您可以在此處檢查sql小提琴: http ://sqlfiddle.com/#!2/a5364/2
我的試用版: http ://sqlfiddle.com/#!2/a5364/5
這是查詢的樣子:-
select x.*, d.name, d.day2, d.time2
from ( SELECT * FROM mytable1 WHERE type=1 ORDER BY userid ASC LIMIT 0,50) x
left join mytable2 d
on x.userid = d.userid
where ( convert(CONCAT(d.day2,' ',d.time2),datetime) >= SUBDATE(curdate(),INTERVAL 2 DAY))
使用convert()
獲取日期時間,然后使用subdate()
查找2天之前的日期。
在您提供的SQL Fiddle上進行驗證。
現在的問題是:如果沒有記錄,在所有的mytable2
在匹配記錄中mytable1
,你還想看mytable1
記錄? 如果是這樣,請將條件移至on
子句:
select x.*, d.name, d.day2, d.time2
from (SELECT *
FROM mytable1
WHERE type = 1
ORDER BY userid ASC
LIMIT 0, 50
) x left join
mytable2 d
on x.userid = d.userid and
(d.day2 + d.time2) >= DATE_SUB(NOW(), INTERVAL 2 DAY);
否則,您可以將聯接更改為inner join
:
select x.*, d.name, d.day2, d.time2
from (SELECT *
FROM mytable1
WHERE type = 1
ORDER BY userid ASC
LIMIT 0, 50
) x join
mytable2 d
on x.userid = d.userid
where (d.day2 + d.time2) >= DATE_SUB(NOW(), INTERVAL 2 DAY);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.