Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 另一个表中缺少MySQL Select条目_Php_Mysql - Fatal编程技术网

Php 另一个表中缺少MySQL Select条目

Php 另一个表中缺少MySQL Select条目,php,mysql,Php,Mysql,我正在尝试获取特定日期的其他表中不存在的值列表 表格布局: 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.date

我正在尝试获取特定日期的其他表中不存在的值列表

表格布局:

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())
我希望ID7和ID8从上面的查询返回,因为它们在表2中不存在。但我没有收到回音

将查询反转为match=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。但是我在这里遗漏了一些非常简单的东西。


在学习mysql时,我发现了以下宝贵参考:

希望你觉得它有用


由于联接不检索空行,因此必须使用左或右联接来处理空行

由于总是有多种方法,另一种方法是在子查询中使用NOT IN运算符(因为MySQL不支持减号)

对于支持减号的DBMS,可以执行以下操作:

SELECT t1.id FROM Table1 as t1
MINUS
SELECT t2.table1id FROM Table2 as t2
    WHERE date(t2.dateupdated) = DATE(NOW())

我更喜欢这样做:

SELECT id FROM Table1
    WHERE id not in (select table1id from Table2 where date(dateupdated) = date(NOW()))

尝试在右表中使用带有空值的左连接。不应该将
和date(t2.dateupdated)=date(NOW())
作为WHERE子句的一部分,尽管我不确定为什么查询在SQL FIDLE中工作。这对我来说非常有效。非常感谢。我要去读左边的连接,看看我在哪里遗漏了我的逻辑。(如果允许,我将在5分钟内接受答案)@Maximus2012它可以是where或join的一部分,因为它正在以任何方式应用筛选表2。@SLin OK。我不知道。感谢您的澄清。@AndrewWilson您还可以研究其他涉及EXISTS和IN子句的方法。我确实尝试过这种方法,但查询花费了很长时间(下面的左连接量的10倍)@AndrewWilson该字段有索引吗?不应该比左连接花费更长的时间,至少不是一个明显更长的时间。在实际示例中,表1有一个数字索引,表2有一个UUID v4index@AndrewWilson您可以在SQL查询之前使用EXPLAIN关键字让数据库服务器告诉您它使用的执行计划。这将告诉您我们的建议中哪一个在您的特定设置中最有效。
SELECT t1.id FROM Table1 as t1
MINUS
SELECT t2.table1id FROM Table2 as t2
    WHERE date(t2.dateupdated) = DATE(NOW())
SELECT id FROM Table1
    WHERE id not in (select table1id from Table2 where date(dateupdated) = date(NOW()))