SQL查询从一个表获取所有记录,除特定记录,按日期,从另一个表

时间:2012-02-08 12:13:41

标签: mysql left-join unions

我正在尝试从两个MySql表中选择记录。我希望第一个表中的所有记录从第二个表中按日期排除特定记录。例如:

表1 T1idfirstNameLastName
表2 idT1idhoursratedate

T1id是两个表之间的链接,因此当表格加入时,我会T1idfirstNamelastNamehours,{ {1}},rate

假设 Table2 中有一条记录,其中date为2012-02-08。使用一个查询,我需要从 Table1 中选择所有记录,但不包括日期为2012-02-08 的Table2记录。

我尝试了JOINS和UNIONS的一些变体,但是我要么获得所有记录,一堆重复记录,要么记录一次(即Table2日期)。我道歉,但我没有特定的代码片段,因为没有什么对我有用。

2 个答案:

答案 0 :(得分:1)

USE INNER JOIN如果您确定两个表中都存在T1id:

SELECT  a.T1id, 
        a.FirstName, 
        a.LastName, 
        b.hours, 
        b.rate, 
        b.date
FROM table1 a INNER JOIN table2 b
        ON a.T1id = b.T1id
WHERE b.date <> DATE('2012-02-08')

但如果您想从Table1 获取所有T1id(表2中存在或不存在),请使用LEFT JOIN

SELECT  a.T1id, 
        a.FirstName, 
        a.LastName, 
        b.hours, 
        b.rate, 
        b.date
FROM table1 a LEFT JOIN table2 b
        ON a.T1id = b.T1id
WHERE b.date <> DATE('2012-02-08')

答案 1 :(得分:1)

这很多次通常使用NOT EXISTS子查询完成,但是子查询可以在较大的表中进行大的性能命中...但是,通过执行LEFT JOIN并且查找NULL实质上是相同的结果

select
      t1.*
   from
      table1 t1
         left join table2 t2
            on t1.t2.t1id
          AND t2.date = '2012-02-08'
   where
      t2.t1id IS NULL