首页 > 解决方案 > 尝试使用 mysql 排除某些

问题描述

我对 mySQL 相当陌生。我有一个表应该在标记为“b”或“s”的字段之间互斥,但它们不是。tn 列中的某些字段具有“b”,另一个字段具有“s”,但它们都具有相同的“tn”。这是我正在等待有人解决的数据问题。同时,我需要从我的“b”查询中排除任何“tn”也将在类似的“s”查询中的项目。我的查询中只有“b”,如何与“s”比较并排除交叉错误?此外,我想排除任何“tn”计数超过 2 的“b”。我知道他们需要修复数据,但是当我等待几个月的时间时,我想获得一组数据开始,那是干净的。

表 hardware_data 如下所示:

tn         hardware_item   shelf   slot   port   type   model
12345678   abcdefg         1       1      1      b     Model1
23456789   bcdefgh         1       2      3      b     Model1
23456789   bcdefgh         1       2      3      s     Model1
34567890   cdefghi         1       1      4      s     Model1
12345678   abcdefg         1       1      4      b     Model1
12345678   abcdefg         1       1      3      b     Model1
45678901   defghij         1       1      2      b     Model1
45678901   defghij         1       1      3      b     Model1

因此,在上述数据中,我将使用以下查询:

select hardware_item, tn, shelf, slot, port
from accessInventory.hardware_data
WHERE model= 'Model1'
AND type = 'b'
AND CHAR_LENGTH(tn)>3
AND tn*1 = tn
LIMIT 100000;

它返回这个数据集

tn         hardware_item  shelf  slot  port  type    model
45678901   defghij        1       1       2    b     Model1
45678901   defghij        1       1       3    b     Model1
23456789   bcdefgh        1       2       3    b     Model1
12345678   abcdefg        1       1       4    b     Model1
12345678   abcdefg        1       1       3    b     Model1
12345678   abcdefg        1       1       1    b     Model1

但我希望它排除重复计数“tn”超过 2 的那些,如 12345678 ,以及与“s”类别交叉的那些,如 23456789。我什至不知道从哪里开始交叉一,我对 3 排除的计数不起作用,因为它正在比较返回的整行,而不仅仅是“tn”。任何帮助将不胜感激。

我当然已经用谷歌搜索了它,但是我没有找到任何我需要的排除项,而且我还没有找到这个排除常见行项目计数超过值的特定案例。

注意,不能使用“Group By”,因为在“b”类别中有 2 个 tn 匹配是有效的。

标签: mysql

解决方案


推荐阅读