我试图获取在特定日期的另一个表中不存在的值列表。
表格布局:
table1 (TABLE)
id INT(10)
table2 (TABLE)
id INT(10)
table1id INT(10)
dateupdated DATETIME(19)
查询我认为不会起作用。
SELECT t1.id FROM Table1 as t1
JOIN Table2 as t2
ON t1.id=t2.table1id
WHERE date(t2.dateupdated) != DATE(NOW())
我期望id 7和8从上面的查询中回来,因为它们不存在于Table2中。但是我没有回来。
将查询反转为匹配= DATE(NOW())为我提供了匹配的行
SELECT t1.id FROM Table1 as t1
JOIN Table2 as t2
ON t1.id=t2.table1id
WHERE date(t2.dateupdated) = DATE(NOW())
响应:
id
1
2
3
4
5
6
9
10
任何指导都会受到赞赏,我还在学习MySQL。但我在这里错过了一些非常简单的事情。
答案 0 :(得分:2)
http://sqlfiddle.com/#!9/7a9fc/11
SELECT t1.id FROM Table1 as t1
LEFT JOIN Table2 as t2
ON t1.id=t2.table1id
AND date(t2.dateupdated) = DATE(NOW())
WHERE t2.id IS NULL;
答案 1 :(得分:0)
由于总有多种方法,另一种方法是使用带有子查询的NOT IN运算符(因为MySQL不支持MINUS)。
SELECT t1.id FROM Table1 as t1
WHERE t1.id NOT IN
(SELECT t2.table1id FROM Table2 as t2
WHERE date(t2.dateupdated) = DATE(NOW()))
对于支持MINUS的DBMS,你可以这样做:
SELECT t1.id FROM Table1 as t1
MINUS
SELECT t2.table1id FROM Table2 as t2
WHERE date(t2.dateupdated) = DATE(NOW())
答案 2 :(得分:0)
这是我喜欢的方式:
SELECT id FROM Table1
WHERE id not in (select table1id from Table2 where date(dateupdated) = date(NOW()))
答案 3 :(得分:-1)
学习mysql我发现了这个宝贵的参考资料:http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/
希望你觉得它很有用!
由于JOIN不检索NULL行,因此必须使用LEFT或RIGHT JOIN来处理空ROWS。