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
我已经很长时间没有进行关系数据库查询了,我的大脑无法处理双重否定,所以任何帮助都会很棒。
最佳答案
此查询可能适合您:
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 表达式中使用字段+通配符。使用子字符串可以让您进行直接 != 比较。
更新:感谢 PaparazzoKid 的 sqlfiddle:http://www.sqlfiddle.com/#!2/3a260/1
关于MySQL 新手 - 在一对多中选择所有 False,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20573226/