2013-04-03 79 views
0

有前端系統,其被輸入這樣的類型在表中的數據,其中i有沒有control.Suppose表其中我的查詢結果的:SQL WHERE條件刪除我的情況下重複記錄

Row| id| entity_code| entity_value 
1   1  Null  22 
2   2  Null  28 
3   3  Null  32 
4   3 Test Entity Test Entity 
5   4  Null  22 

在上述查詢返回表的例子,前端輸入新的記錄「測試實體」,而不是覆蓋ID = 3

其實表格是非常複雜的n有十幾個連接,我希望WHERE條件爲我的查詢,我們可以刪除 如果'entity_code'列爲空,並且沒有其他具有相同'Entryid'的記錄,則ok(行1,2 n 4),但是如果'entity_code'列不爲null(Row 4)和其他具有相同'id'的記錄是存在的(例如第3行)。 where條件的結果是這樣的:

Row| Entry| entity_code| entity_value 
1  1    Null  22 
2  2    Null  28 
3  3   Test Entity 32 
4  4    Null  22 

我需要在哪裏Condtion這顯示出這樣的結果。

+0

後,您目前擁有的查詢,請。 – Aushin 2013-04-03 19:15:51

+0

假定簡單查詢 SELECT * from table where ??? – khawarPK 2013-04-03 19:17:52

+1

解釋爲什麼你想要entity_value爲32,而不是測試實體請 – Aushin 2013-04-03 19:36:48

回答

2

如果我正確理解你的邏輯,這應該給你正確的結果:

SELECT 
    e1.min_row row, 
    e1.id, 
    e2.max_value, 
    e.entity_value 
FROM 
    entity e INNER JOIN (
    SELECT 
     id, 
     MIN(row) min_row 
    FROM 
     entity 
    GROUP BY 
     id 
    ) e1 
    ON e.row = e1.min_row 
    INNER JOIN (
    SELECT 
     id, 
     MAX(entity_code) max_value 
    FROM 
     entity 
    GROUP BY 
     id 
    ) e2 
    ON e1.id = e2.id 

請參閱小提琴here

這也比較簡單,適用於您的樣本數據,但我不知道它會在你的真實數據的工作(這取決於你的數據庫結構):

SELECT 
    e1.Row, 
    e1.id, 
    e2.entity_code, 
    e1.entity_value 
FROM 
    entity e1 LEFT JOIN entity e2 
    ON e2.entity_code IS NOT NULL 
    AND e1.id = e2.id AND e1.Row!=e2.Row 
WHERE 
    e1.entity_code IS NULL 
+0

看起來不錯, 讓我試試這個解決方案與我的例子。 – khawarPK 2013-04-03 20:07:17