我正在尝试从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天的所有行,并且这些行与状态1的table_1相关联。我现在的方式是使用2个查询和2个foreach数组,效率非常低。有人可以帮我写一个带连接的查询吗?谢谢你的时间。
答案 0 :(得分:3)
无需循环,您可以在表之间执行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);
答案 1 :(得分:2)
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的结果,即使表2中没有对应的结果,也可以使用左连接,例如
答案 2 :(得分: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)