MySQL新手-在一对多中选择all False 设备网络卡 ================== =========================================== |id |主机名| | id |设备| id | ip |地址| dns| ================== =========================================== |1 |桌面1 | 1 | 1 | 10.0.0.1 |桌面1| |2 | laptop1 | 2 | 2 | 10.0.0.2 | laptop1| |3 | laptop2 | 3 | 2 | 10.0.0.3 | laptop1w| |4 |桌面2 | 4 | 3 | 10.0.0.4 |乔治| | .. | ... | | 5 | 4 | 10.0.0.5 |桌面2W| ================== ===========================================

MySQL新手-在一对多中选择all False 设备网络卡 ================== =========================================== |id |主机名| | id |设备| id | ip |地址| dns| ================== =========================================== |1 |桌面1 | 1 | 1 | 10.0.0.1 |桌面1| |2 | laptop1 | 2 | 2 | 10.0.0.2 | laptop1| |3 | laptop2 | 3 | 2 | 10.0.0.3 | laptop1w| |4 |桌面2 | 4 | 3 | 10.0.0.4 |乔治| | .. | ... | | 5 | 4 | 10.0.0.5 |桌面2W| ================== ===========================================,mysql,Mysql,大家好,这是我的情况。我们有一个拥有500多台设备的国产计算机清单,数据库从不同的来源填充。我试图找出这种情况下的差异,因此我试图选择devices.id,其中我没有DNS记录的地方与主机名不同。在这种情况下,它将返回devices.id=3 我已经很长时间没有进行关系数据库查询了,而且我的大脑无法处理双重否定,因此任何帮助都会很好。此查询可能会为您提供帮助: select d.id, d.hostname, n.dns from devices d left join network_

大家好,这是我的情况。我们有一个拥有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))
我之所以使用子字符串,是因为我不确定如何在不相似的表达式中使用字段+通配符。使用“子字符串”可以直接执行操作!=比较


更新:感谢狗仔队的sqlfiddle:

它不会也返回4吗?子字符串中的0应该是1。From:要从中提取子字符串的字符串中第一个字符的位置被认为是1@RocketHazmat-答案已修正-谢谢!每一次都能让我明白,这是应该的。如果你想把它添加到答案中,这里有一把小提琴:是的,这确实做到了。。。我花了一点时间来适应我的真实数据库的查询,但它看起来像它的工作!谢谢