MySQL使用其他类似条件离开了联接

时间:2013-12-16 14:26:43

标签: mysql left-join sql-like

计划是从表工作到表项目的连接。在此之后我想用通配符work.workdate ='2013-12-%'过滤结果 - 结果应该是本月与项目结合完成的工作

表格工作

CREATE TABLE IF NOT EXISTS `work` (
  `idwork` int(11) NOT NULL AUTO_INCREMENT,
  `iduser` int(11) NOT NULL,
  `idproject` int(11) NOT NULL,
  `workdate` varchar(45) NOT NULL,
  `duration` varchar(45) NOT NULL,
  `description` varchar(45) NOT NULL,
  PRIMARY KEY (`idwork`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

表项目

CREATE TABLE IF NOT EXISTS `project` (
  `idproject` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL,
  `id` int(11) DEFAULT NULL,
  PRIMARY KEY (`idproject`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

声明

SELECT * FROM work LEFT JOIN project ON work.idproject=project.idproject AND work.workdate LIKE '2013-12-%';
  • 输出:每一行。不是2013年12月的行 项目部分中的空值
  • 预期产量:仅从2013年12月起的行数

那我的问题在哪里?我是否必须使用括号或类似的东西?我在Stackoverflow上搜索但总是发现LIKE在JOIN中的问题,但这不是我想要的。 LIKE是一个额外的条件。

2 个答案:

答案 0 :(得分:2)

SELECT 
    *
FROM
    work
LEFT JOIN
    project
ON
    work.idproject = project.idproject
WHERE
    work.workdate LIKE '2013-12-%';

应该做的伎俩。您希望按项目ID加入项目,但按日期过滤工作。因此,应该在WHERE部分中进行过滤。

答案 1 :(得分:1)

我理解你的问题我认为附加条件应该进入WHERE - 子句:

SELECT * 
FROM work 
LEFT JOIN project ON work.idproject=project.idproject 
WHERE work.workdate LIKE '2013-12-%';