我正在尝试从两个MySql表中选择记录。我希望第一个表中的所有记录从第二个表中按日期排除特定记录。例如:
表1 T1id
,firstName
,LastName
表2 id
,T1id
,hours
,rate
,date
T1id
是两个表之间的链接,因此当表格加入时,我会T1id
,firstName
,lastName
,hours
,{ {1}},rate
假设 Table2 中有一条记录,其中date
为2012-02-08。使用一个查询,我需要从 Table1 , 中选择所有记录,但不包括日期为2012-02-08 的Table2记录。
我尝试了JOINS和UNIONS的一些变体,但是我要么获得所有记录,一堆重复记录,要么记录一次(即Table2日期)。我道歉,但我没有特定的代码片段,因为没有什么对我有用。
答案 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