我在PostgreSQL中有这个表:
appid | appname | apptype | creationtime | createdby | display
-------+-------------------------------------+---------+--------------+-----------+---------
0 | Custom | -1 | | | t
1000 | Performance/Resource | -2 | | | t
2000 | PING | 0 | | | t
2001 | HTTP | 0 | | | t
2002 | HTTPS | 0 | | | t
2003 | FTP | 0 | | | t
2004 | LDAP | 0 | | | t
2005 | IMAP | 0 | | | t
2006 | POP | 0 | | | t
2007 | SMTP | 0 | | | t
2008 | DNS | 0 | | | t
2009 | NFS | 0 | | | t
2010 | NTP | 0 | | | t
2011 | SSH | 0 | | | t
2012 | TCP | 0 | | | t
2013 | TELNET | 0 | | | t
3000 | Generic Mail (RTT) | 3 | | | t
3001 | Apache Tomcat | 2 | | | t
3002 | JBoss | 2 | | | t
3003 | MySQL | 1 | | | t
3004 | WebSphere | 2 | | | t
4000 | Microsoft Exchange Server 2003 | 3 | | | t
4001 | Exchange Server 2007 /2010 | 3 | | | t
4003 | Microsoft SQL Server 2008 | 1 | | | t
4004 | Microsoft ISA Server 2006 | 99 | | | t
4005 | Microsoft IIS | 4 | | | t
3005 | DB2 | 1 | | | t
3006 | Apache HTTP Server | 4 | | | t
3007 | Oracle | 1 | | | t
3008 | PostgreSQL | 1 | | | t
3009 | WebLogic | 2 | | | t
3010 | Adobe ColdFusion | 2 | | | t
3011 | Sybase | 1 | | | t
4007 | Microsoft SQL Server 2005 (EXPRESS) | 1 | | | t
4008 | Microsoft Team Foundation Server | 2 | | | t
4009 | Microsoft .NET | 99 | | | t
3012 | Apache Tomcat | 2 | | | f
Apache Tomcat在下拉列表中显示此表时重复2次。如何禁用最后一行3012?我有一个删除它的选项,但是这个表在几个地方使用,所以我不想删除它。
答案 0 :(得分:2)
我认为更重要的问题是为什么它会在你的数据库中出现两次。根据您使用的内容,此查询忽略一个可能与删除一个错误一样。也许它与显示f的唯一条目有关。我想你可以做WHERE显示!='f'
答案 1 :(得分:1)
Tomcat出现两次,因为它在表中两次,一次是ID 3001,另一次是ID 3012.我称之为数据问题,而不是查询问题。它真的需要在那里两次吗?你说你不愿意删除其中一个,因为它在几个地方使用过,但如果你现在不修复它,那么以后修复起来会更难。
我专注于合并那些重复的行。查找引用该对中的一个的所有记录(在其他表中),并更新它们以引用另一个。然后你可以删除那些没有任何引用的那个。
答案 2 :(得分:0)
为什么不使用display
列?听起来像是过滤掉了不应该显示的东西。所以,你可以这样做一个查询:
SELECT appid, appname
FROM stat_applications
WHERE appid <> 0
AND appid <> 1000
AND display = 't'
如果您不想使用display
,那么您只需将3012添加到您要忽略的事项列表中:
SELECT appid, appname
FROM stat_applications
WHERE appid <> 0
AND appid <> 1000
AND appid <> 3012
或者,由于您的排除列表越来越长,请使用NOT IN
:
SELECT appid, appname
FROM stat_applications
WHERE appid NOT IN (0, 1000, 3012)