Devices Network_Card
================== ===========================================
| id | hostname | | id | device_id | ip_address | dns |
================== ===========================================
| 1 | desktop1 | | 1 | 1 | 10.0.0.1 | desktop1 |
| 2 | laptop1 | | 2 | 2 | 10.0.0.2 | laptop1 |
| 3 | laptop2 | | 3 | 2 | 10.0.0.3 | laptop1w |
| 4 | desktop2 | | 4 | 3 | 10.0.0.4 | george |
| .. | ... | | 5 | 4 | 10.0.0.5 | desktop2w |
================== ===========================================
嗨伙计们,这是我的情况。我们有一个拥有500多台设备的本土计算机库存,并且数据库从不同来源填充。我试图在这种情况下找到差异,所以我试图选择devices.id 我没有DNS记录不是主机名。在这种情况下,它将返回devices.id = 3
我很长时间没有完成关系数据库查询,而且我的大脑无法处理双重否定,所以任何帮助都会很棒。
答案 0 :(得分:2)
此查询可能会为您执行此操作:
select d.id, d.hostname, n.dns
from devices d
left join network_card n on d.id = n.device_id
where d.hostname != substring(n.dns, 1, LENGTH(d.hostname))
我正在使用子字符串,因为我不确定如何在NOT LIKE表达式中使用字段+通配符。使用substring可以直接进行!=比较。
更新:感谢PaparazzoKid为:http://www.sqlfiddle.com/#!2/3a260/1