使用Like和Not Like从2个表中选择

时间:2014-03-11 04:55:52

标签: mysql

我的数据库中有2个表。 Table1由Work_ID,Actual_Work_Date组成。 表2由Work_ID,Scheduled_Date组成。

以下是一个案例:

表1

  

Work_ID |的 Actual_Work_Date

     

10000 | 2014年2月25日

     

10001 | 2014年2月13日

表2

  

Work_ID |的 Scheduled_Date

     

10000 | 2014-01-10

     

10000 | 2014年3月1日

     

10001 | 2014年1月22日

     

10001 | 2014年2月13日

对于Work_ID=10000,我们未能按照第一个时间表(2014-01-10)执行工作,因此我们重新安排成为2014-03-01。 但有些我们如何能够在2014-02-25上完成工作。

在我的网站上,我想查看本月未安排但在本月执行的工作清单。如何使这样的列表只显示Work_ID = 10000而不显示Work_ID = 10001? 我做了以下但没有工作:

$query = "
    SELECT a.Work_ID 
    FROM Table1 a, Table2 b 
    WHERE a.Actual_Work_Date LIKE '2014-02%' 
        AND b.Scheduled_Date NOT LIKE '2014-02%' 
        AND a.Work_ID = b.Work_ID ";

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

这应该按预期工作,可能不会很快但应该给出正确的结果。

基本上,所有工作都来自Table1,这是在2月份完成的,然后删除了2月份安排的所有工作(任何一个时间表)

SELECT Work_ID 
  FROM Table1
 WHERE MONTH(Actual_Work_Date) = 2
   AND Work_ID NOT IN (SELECT Work_ID 
                         FROM Table2
                        WHERE MONTH(Scheduled_Date) = 2)

答案 1 :(得分:0)

不确定MySQL的语法,但这可能会有所帮助。

SELECT 
    a.*
FROM Table a
INNER JOIN Table b ON a.Work_id = b.Work_id
WHERE DATE_FORMAT(a.Actual_Work_Date,"%c") = your_month_number AND DATE_FORMAT(b.Scheduled_Date,"%c") <> your_month_number AND a.Work_id = 10000

使用此链接可获取有关日期时间功能的更多信息。 MySQL DateTime Function