【问题标题】:MYSQL: one table entries containing matching entries in second table. Any query ideasMYSQL:一个表条目包含第二个表中的匹配条目。任何查询想法
【发布时间】:2019-08-28 09:43:03
【问题描述】:

我正在使用两个具有大日志字符串的 MYSQL 表,例如:“这是一个示例日志条目,IP 地址为 123.456.789”。此外,还有第二个表,其中包含每行中的 IP 地址列表。我想检查日志条目中所有匹配的 IP 地址,并将结果作为日志表中具有匹配 IP 的所有条目。

我已经在 RHEL 服务器上安装了 Mysql 社区版本 5.7.22。

表1:日志表

+-------------+---------------+------+-----+---------+----------------+
| Field       | Type          | Null | Key | Default | Extra          |
+-------------+---------------+------+-----+---------+----------------+
| log_id      | int(11)       | NO   | PRI | NULL    | auto_increment |
| Id          | varchar(30)   | NO   |     | NULL    |                |
| host        | varchar(50)   | YES  |     | NULL    |                |
| external_id | varchar(40)   | NO   |     | NULL    |                |
| message     | varchar(8000) | YES  |     | NULL    |                |
| timestamp   | varchar(30)   | NO   |     | NULL    |                |
+-------------+---------------+------+-----+---------+----------------+

表 2:IP 表

+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| ip        | varchar(30) | NO   |     | NULL    |                |
| id        | int(11)     | NO   | PRI | NULL    | auto_increment |
+-----------+-------------+------+-----+---------+----------------+

我正在使用以下查询:

select * from logs where message like '%'ip_table.ip'%'; 

这是一个语法错误。

还有其他想法可以解决这个问题吗?

【问题讨论】:

标签: mysql sql mysql-error-1064


【解决方案1】:

您可以使用concat()修复语法错误:

select *
from logs l join
     ip_table it
     on l.message like concat('%', it.ip, '%'); 

但是,这将匹配“1.1.1.1”和“1.1.1.10”。

要解决此问题,您需要考虑分隔符。假设这始终是一个空格:

select *
from logs l join
     ip_table it
     on concat(' ', l.message, ' ') like concat('% ', it.ip, ' %'); 

【讨论】:

  • 我收到“'where 子句'中的未知列'ip_table.ip_value'”。作为 ip_table。我相信我们需要在这里使用一些加入作为第二张表。如果我错了,请纠正我
  • 有人有什么建议吗?
  • @DEEPANSHUMARWAH。 . .这个答案没有where 子句,所以它不会产生那个错误。
猜你喜欢
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
  • 2010-11-11
  • 2014-03-03
  • 2013-09-20
  • 2013-04-15
  • 2012-05-13
  • 1970-01-01
相关资源
最近更新 更多