加入2个表SQL查询

时间:2015-09-13 07:06:06

标签: mysql sql join

我正在尝试从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数组,效率非常低。有人可以帮我写一个带连接的查询吗?谢谢你的时间。

3 个答案:

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