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

j2datikz  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(260)

我有一张table
table1 a_id 作为 PK , ipaddress , create_dt 在这里 ipaddressvarchar , create_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` 作为 `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'
zpgglvta

zpgglvta1#

如果您使用的是内部联接,那么您可以直接在THON子句中指定where中的条件吗

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

ifsvaxew

ifsvaxew2#

我已经编写了以下查询,想知道是否有更好的方法来编写查询
你的问题看起来不错。您使用特定键联接了两个表,并应用了所需的where子句。所以,我的建议是不要把日期 date(a.create_dt) . 转换 create_dt 列到 date 而是字段。应用强制转换可能会降低查询性能。尽可能避免这种铸件。

相关问题