如何在日期范围内加入MySQL表?

时间:2018-08-30 00:54:49

标签: mysql

我有一个源表(TableA),其中包含每天的多个记录。我需要将其连接(在日期字段上)到TableB,其中每年包含一些记录。

问题在于,TableA应该加入到TableB的最早记录中,其中TableA的日期<= TableB的日期。

CREATE TABLE IF NOT EXISTS `tableA` (
  `id` int(6) unsigned NOT NULL,
  `date` date NOT NULL,
  `content` varchar(200) NOT NULL,
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
INSERT INTO `tableA` (`id`, `date`, `content`) VALUES
  ('1', '2017-10-03', 'The earth is round.'),
  ('2', '2018-01-01', 'The earth is flat'),
  ('3', '2018-01-01', 'One hundred angels can dance on the head of a pin'),
  ('4', '2018-01-02', 'The earth is flat and rests on a bull\'s horn'),
  ('5', '2018-01-03', 'The earth is like a ball.');

CREATE TABLE IF NOT EXISTS `tableB` (
  `date` date NOT NULL,
  `content` varchar(200) NOT NULL,
  PRIMARY KEY (`date`)
) DEFAULT CHARSET=utf8;
INSERT INTO `tableB` (`date`, `content`) VALUES
  ('2017-01-01', 'ONE'),
  ('2017-12-01', 'TWO'),
  ('2018-01-02', 'THREE'),
  ('2018-01-05', 'FOUR');

基于this SQLFiddle,我正在寻找以下结果。

tableA.id | tableB.content
--------------------------
1         | TWO
2         | THREE
3         | THREE
4         | THREE
5         | FOUR

1 个答案:

答案 0 :(得分:2)

这是一种解决方案:

SELECT a.id, b.content
FROM TableA a
JOIN TableB b ON b.date = (
  SELECT MIN(b2.date)
  FROM TableB b2
  WHERE b2.date >= a.date
);

我不确定这是否是最有效的方法,但是it works