MySQL 新手 - 在一对多中选择所有 False

标签 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

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

最佳答案

此查询可能适合您:

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/

相关文章:

php - 如何有效地同时哈希多个密码?

php - Eloquent groupBy 在 Laravel 5.3 中使用有效的 SQL 查询生成 "SQLSTATE[42000]"

php - Codeigniter 通过传递逗号分隔值来获取数据

javascript - 如何使用 node.js 在 mysql 数据库上实现推送通知系统

mysql - 无法从中央传输 Artifact mysql :mysql-connector-java:pom:5. 1.38 (http ://repo. maven.apache.org/maven2)

Mysql更新多张表

MySQL 一次计算多个列或单独的事务

mysql - 如何在 Select 语句中使用千位分隔符显示列?

php - 需要从mysql更新数据

mysql - 由于编码原因,从 CSV 导入 mysql 时省略了行