问题描述
我在数据库表中有一个网络设备列表。用户可以使用Web界面获取有关这些设备的杂项信息(在查询中以WHERE hostname IN('hostname1','hostname2',...)
结尾)。假设给定的五个条目之一由于拼写错误而错误。所以通常我从数据库查询中得到四个答案,错误的一个仍然会被忽略。我需要检测到不存在的条目,以向用户提供如下提示:
hostname1 exist -> requested Information
hostname2 exist -> requested Information
hostname3 NOT EXIST
hostname4 exist -> requested Information
hostname5 exist -> requested Information
我用EXISTS选项用尽了所有想法。预先感谢!
解决方法
在创建临时表“搜索”之后,我只找到一种解决方案,假设其中包含一个名为“主机名”的列,并带有值。我找不到将值列表(“ hostname1”,“ hostname2”,“ hostname4”)转换为记录列表的方法。因此,这里是一列的临时表:
表“搜索”列“主机名”
hostname1
hostname2
hostname4
在这里创建“搜索”表:
CREATE TEMPORARY TABLE IF NOT EXISTS search AS SELECT 'hostname1' as hostname from host union SELECT 'hostname2' as hostname from host union select 'hostname4' as hostname from host
然后在列上进行左连接:
CREATE TEMPORARY TABLE IF NOT EXISTS search AS SELECT 'hostname1' as hostname from host union SELECT 'hostname2' as hostname from host union select 'hostname4' as hostname from host; select * from search left join host ON host.hostname = search.hostname;
这是输出列(主机名,id,主机名):
hostname1 1 hostname1
hostname2 2 hostname2
hostname4 NULL NULL
在我的情况下,初始表主机中不存在hostname4,例如,这种方法可使用结果的id列检测不正确的值。