MySQL新手 - 在一对多中选择全部错误

时间:2013-12-13 18:13:46

标签: mysql

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

我很长时间没有完成关系数据库查询,而且我的大脑无法处理双重否定,所以任何帮助都会很棒。

1 个答案:

答案 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