尝试使用mysql排除某些

时间:2018-07-27 12:17:59

标签: 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”。任何帮助将不胜感激。

我已经用谷歌搜索了它,但是我没有找到任何我需要的排除对象,并且没有发现这种排除普通行项目数超过值的特殊情况。

注意,不能使用“分组依据”,因为在“ b”类别中具有2 tn的匹配项是有效的。

0 个答案:

没有答案