所以,我正在使用专有数据,所以我不能在这里剪切粘贴我的代码。而且,我很抱歉这可能是微不足道的,但由于某种原因,我无法理解为什么它会重复。
所以,我有 4 张桌子
表 1 did, vid, sid, cid
表 2 视频,vname
表 3 sid、日期、值
表 4 cid、日期、值
我想要实现的是table1。做了,table2.vname,table3.sid,table3.date,table3.value,table4.cid,table4.date,table4.value
如果我做
select table1.did, table2.vname, table3. . .
from table 1
join table 2 on table2.vid = table1.vid
join table 3 on table3.sid = table1.sid and table3.date > now() - interval 1 year
where table1.did = 1
;
我得到了我想要的。
table1.did, table2.vname, table3.sid, table3.date, table3.value
1, blah, 123, 2013-3-1, 123
1, blah, 123, 2013-2-1, 3234
1, blah, 123, 2013-1-1, 111111
1, blah, 123, 2012-12-1, 122222
1, blah, 123, 2012-11-1, 155341
1, blah, 123, 2012-10-1, 102002
然后:
select table1.did, table2.vname, table3. . ., table4. . .
from table 1
join table 2 on table2.vid = table1.vid
join table 3 on table3.sid = table1.sid and table3.date > now() - interval 1 year
join table 4 on table4.cid = table1.cid and table4.date > now() - interval 1 year
where table1.did = 1
;
给我:
t1.did, t2.vname, t3.sid, t3.date, t3.value, t4.cid, t4.date, t4.value
1, blah, 123, 2013-3-1, 123, 456, 2013-3-1, 1112345
1, blah, 123, 2013-3-1, 123, 456, 2013-2-1, 234
1, blah, 123, 2013-3-1, 123, 456, 2013-1-1, 2
1, blah, 123, 2013-2-1, 3234, 456, 2012-12-1, 332111
1, blah, 123, 2013-2-1, 3234, 456, 2012-11-1, 5432
1, blah, 123, 2013-2-1, 3234, 456, 2012-10-1, 555
无论如何,当我加入第四张桌子时,我可以防止重复吗?如果我切换第 3 次和第 4 次,它的工作方式相同,所以这肯定与我如何将它们连接在一起有关。
感谢您的帮助!
*编辑/解决方法*
我发现我觉得这样做很笨拙。我将其发布为答案,因为我知道它有效。但是,如果有人知道更好的方法来做到这一点,我会将其标记为已接受的答案。
添加一个名为“天”的新表
数据:
day_id, dateYMD, dateUS, dateEU, dayName
1, 1970-01-01, 01/01/1970, 01/01/1970, Thursday
2, 1970-01-02, 01/02/1970, 02/01/1970, Friday
3, 1970-01-03, 01/03/1970, 03/01/1970, Saturday
. . .
. . .
. . .
735322, 2013-03-30, 03/30/2013, 30/03/2013, Saturday
735323, 2013-03-31, 03/31/2013, 31/03/2013, Sunday
735324, 2013-04-01, 04/01/2013, 01/04/2013, Monday
然后改变了我的查询:
select table1.did, table2.vname, date_format(days.dateYMD, '%Y-%m-01') as daysYMD, table3. . ., table4. . .
from table 1
join days on days.dateYMD > now() - interval 1 year and days.dateYMD <= now()
join table 2 on table2.vid = table1.vid
join table 3 on table3.sid = table1.sid and table3.date = date_format(days.dateYMD, '%Y-%m-01')
join table 4 on table4.cid = table1.cid and table4.date = date_format(days.dateYMD, '%Y-%m-01')
where table1.did = 1
group by daysYMD
;
再次,这完成了工作 - 但我想知道是否有人知道更好的方法。
谢谢!