我对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”。任何帮助将不胜感激。
我已经用谷歌搜索了它,但是我没有找到任何我需要的排除对象,并且没有发现这种排除普通行项目数超过值的特殊情况。
注意,不能使用“分组依据”,因为在“ b”类别中具有2 tn的匹配项是有效的。