2013-12-16 81 views
2

该计划是从表工作左表连接到表项目。这之后,我想过滤用通配符work.workdate =“2013-12-%”的结果 - 结果应该是做本月结合项目MySQL左加入其他相似条件

表工作

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
SELECT 
    * 
FROM 
    work 
LEFT JOIN 
    project 
ON 
    work.idproject = project.idproject 
WHERE 
    work.workdate LIKE '2013-12-%'; 

应该这样做。您想按项目ID加入项目,但按日期筛选工作。所以过滤应该在WHERE部分完成。

+0

啊,我看我的问题,谢谢。如果是这样的话,问题解决了 – swaechter

+0

,使用'INNER JOIN'。 –

1

正如我理解你的问题,我认为附加条件应进入WHERE -clause:

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