MySQL选择另一个表中缺少的条目

时间:2015-04-27 18:17:05

标签: php mysql

我试图获取在特定日期的另一个表中不存在的值列表。

表格布局:

table1 (TABLE)
 id INT(10)

table2 (TABLE)
 id INT(10)
 table1id INT(10)
 dateupdated DATETIME(19)

SQLFiddle

查询我认为不会起作用。

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。但我在这里错过了一些非常简单的事情。

4 个答案:

答案 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。

相关问题