[英]Join 2 tables SQL query
我正在尝试从2个表中为Select编写查询。
表格如下:
Table_1:
id (int)
name (varchar)
status int (0,1)
Table_2:
id (int)
table_1_id (int)
name (varchar)
time (datetime)
我需要选择Table_2中不超过1天且与table_1状态为1相关联的所有行。我现在的方法是使用2个查询和2个foreach数组,效率非常低。 有人可以帮我写一个带连接的查询吗? 感谢您的时间。
不需要循环,你可以在表之间做一个JOIN
select t2.*
from Table_2 t2 join Table_1 t1 on t2.table_1_id = t1.id
where t1.status = 1
and date(t2.`time`) = date(now() - interval 1 day);
SELECT table_2.* FROM table_1 t1 INNER JOIN table_2 t2 ON t2.table_1_id=t1.id
WHERE t1.status=1 AND time < (NOW() - INTERVAL 1 DAY);
您必须使用ON
来连接表,因为相关字段的名称不同。 否则你可以加入USING(id_field)
。 在你的情况下,内连接可能是最有用的。 如果你想匹配table_1的结果,你可以使用左连接,即使table_2中没有对应的结果,例如
不需要2个查询。 您可以使用1个查询:
SELECT t2.* FROM Table_1 t1, Table_2 t2
WHERE t1.id = t2.table_1_id AND
t1.status = 1 AND
DATE(t2.'time') >= DATE(now() - INTERVAL 1 DAY)
因为你想要
我需要选择Table_2中不超过1天的所有行
所以我们必须有大于或等于运算符:
DATE(t2.'time') >= DATE(now() - INTERVAL 1 DAY)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.