给定一个包含列(col1,col2,col3,col4,…)的表,我们如何查询该表,使其仅返回特定列子集(例如(col2,col4,col5)的值彼此不同的行。
例如,对于该表(该表是在执行一些交叉联接和查询之后生成的),将列的子集定义为(t1\u id、t2\u id、t3\u id):
然后查询应返回以下内容:
列的子集将是可变的,并且可以非常大,因此使用类似于 where t1.id<>t2.id and t1.id<>t3.id and t2.id<>t3.id
不是一个方便的方法。
2条答案
按热度按时间xoshrz7s1#
一个简单的解决方案是在n-1列的条件中使用not。
每增加一次,可以缩短一次。
例如,如果有5列:
另一种方法是连接id,然后使用regex。
在dbfiddle上测试mariadb 10.2
cyvaqqii2#
这个
not in
方法对我来说最有意义。但是,mariadb支持pcre正则表达式。这些都支持反向引用。因此,您可以使用它们来查找重复项:
请注意,您可能需要将反斜杠加倍,因为它通常是转义字符。