2013-12-16 82 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-%';