2011-05-06 53 views
1

我有此表中的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

信息太少,無法在此處繼續。它可以像「WHERE appid!= 3012」一樣簡單,但是他們知道誰? – ceejayoz 2011-05-06 03:07:21

+0

SELECT DISTINCT?.. – Magicianeer 2011-05-06 03:07:55

+0

@ ceejayoz:當我使用這個,然後我的整個下拉列表顯示爲空 – Harsh 2011-05-06 03:19:12

回答

2

我認爲更重要的問題是爲什麼它在你的數據庫中兩次。取決於你使用這個查詢來忽略一個可能與刪除一個一樣錯誤。也許它與這只是顯示f的唯一條目有關。我猜你可以做WHERE顯示!='f'

+0

$ query =「select appid,appname = stat_applications,其中appid!= 0和appid!= 1000」 ;現在我可以把這個 - – Harsh 2011-05-06 03:37:33

+0

放在最後 - '...和appid!= 1000並顯示!='f'' – 2011-05-06 03:48:52

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) 
1

Tomcat的,因爲它是表中的兩次,一次與ID 3001,並再次與ID 3012我會打電話會出現兩次,與第一個問題e數據,而不是查詢。它真的需要在那裏兩次嗎?你說你不願意刪除它們中的一個,因爲它在幾個地方使用過,但是如果你現在不修復它,稍後修復將更加困難。

我會專注於合併這些重複的行。查找引用該對中的一個的所有記錄(在其他表中),並更新它們以引用另一個記錄。然後你可以刪除一個沒有任何指向的東西了。