MySQL:从另一个表中查找服务器

时间:2018-01-09 06:48:21

标签: mysql sql inner-join

我有一个table1 a_idPKipaddresscreate_dt 此处ipaddressvarcharcreate_dtdatetime

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列,PKipcheck_type check_statusa_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

2 个答案:

答案 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条件表达式的另一种方式