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()))