我有以下mysql数据库:
variable displayname clevs ccols cmin cmax show_on_quicklinks client
'capesfc' 'cape' '100 200' '18 19' '100' '3400' 'gfs,access-c' NULL
'lftxsfc' 'li' '-10 -9' '50 52' '-10' '0' 'gfs' NULL
'lftxsfc' 'li' '-10 -9' '50 52' '-10' '0' 'gfs,access-c' 'client1'
'tscreen' 'tempsfc' '-10 45' '50 52' '-10' '45' 'gfs,access-c' 'client1'
'lftxsfc' 'li' '-10 -9' '50 52' '-10' '0' 'access-c' 'client2'
'capesfc1' 'cape1' '100 200' '18 19' '100' '3400' 'gfs,access-c' NULL
我想选择客户端不为空的唯一displayname,否则只返回displayname。。。因此,在下面的示例中,如果选择client='client1',它将返回client1的行,并且还必须返回client为null的所有其他行。它不能为其他客户端返回任何其他行:
variable displayname clevs ccols cmin cmax show_on_quicklinks client
'lftxsfc' 'li' '-10 -9' '50 52' '-10' '0' 'gfs,access-c' 'client1'
'tscreen' 'tempsfc' '-10 45' '50 52' '-10' '45' 'gfs,access-c' 'client1'
'capesfc' 'cape' '100 200' '18 19' '100' '3400' 'gfs,access-c' NULL
'capesfc1' 'cape1' '100 200' '18 19' '100' '3400' 'gfs,access-c' NULL
3条答案
按热度按时间e4yzc0pl1#
以下是您在rextester.com/uijk63292上查询的变体
注意:我猜您只需要client1中尚未包含的任何displayname,它由以下内容返回:
看到了吗http://rextester.com/llokz9426
xpszyzbs2#
您可以尝试使用聚合来执行以下操作,但是如果您使用的是mysql的升级版本,那么您可以使用row\ u number()函数,这样更容易识别重复项
kcugc4gi3#
更改样本后修改查询:
另请参见:http://rextester.com/vhndh48312
注意:上面的查询模拟了“row\u number()”,这是一个非常有用的“窗口函数”,可以在mysql 8和许多其他sql数据库中找到。
原始:
这不是一个有效的查询,但是它从您的示例3中找到了想要的2行。
请参见:http://rextester.com/taym62841
如果你有一个mysql的最新版本,那么更好的方法是可用的。