我有一个table1
a_id
表PK
,ipaddress
,create_dt
此处ipaddress
为varchar
,create_dt
为datetime
a_id ip create_dt
9205 10.10.10.10 2017-01-07 08:03:32
9206 10.10.10.11 2017-01-06 08:03:32
9207 10.10.10.12 2015-01-07 08:03:32
---超过1000行
我有另一个mysql表,其中包含以下id
列,PK
,ip
,check_type
check_status
,a_id
:
此处a_id
是来自table1
id ip check_type check_status a_id
1 10.10.10.10 check1 FAIL 9205
2 10.10.10.10 check2 PASS 9205
3 10.10.10.11 check1 PASS 9206
4 10.10.10.11 check2 PASS 9206
我想要table1
date(create_dt) >= '2017-01-07'
和table1.a_id = table2.a_id
的所有行
table2.check1 = 'FAIL'
和a_id ip create_dt
9205 10.10.10.10 2017-01-07 08:03:32
所以从上面的例子中,我的查询应该返回
SELECT *
FROM table1 a
INNER JOIN table2 b
ON a.a_id = b.a_id
WHERE date(a.create_dt) >= '2017-01-07'
AND
b.check_status = 'FAIL'
AND b.check_type = 'check1'
我编写了以下查询,想知道是否有更好的方法来编写查询。 以下查询似乎有点慢
@WebfluxTest
答案 0 :(得分:2)
我写了以下查询,想知道是否有一些 更好的方式来编写查询
您的查询看起来不错。您使用特定键连接了两个表并应用了所需的where子句。所以,我的建议是不要像date(a.create_dt)
那样投出日期。将create_dt
列转换为date
字段。应用强制转换可能会降低查询性能。尽可能避免这种铸件。
答案 1 :(得分:0)
您使用内部联接的事实是否可以直接在子句
中指定条件SELECT *
FROM table1 a
INNER JOIN table2 b
ON a.a_id = b.a_id
AND date(a.create_dt) >= '2017-01-07'
AND b.check_status = 'FAIL'
AND b.check_type = 'check1'
结果相同..只是jon条件表达式的另一种方式