2015-06-26 22 views
0

我期待選擇(或刪除)全部被包含在以下SQL的ID ...ID和HAVING

SELECT ID 
FROM AHsTransactions 
GROUP BY TypeID, AH1ID, AH2ID 
HAVING COUNT(*) > 1 

的問題是如何獲得來自這個分組內的行的ID?

一個簡單的數據集將是: INSERT INTO AHsTransactions(TypeID, AH1ID, AH2ID) VALUES (1, 2, 3), (1, 2, 3), (1, 2, 4)

我已經得到了它的工作使用多個SQL語句,而不是這是可能在一個SQL語句?

1)SELECT TypeID, AH1ID, AH2ID FROM AHsTransactions GROUP BY TypeID, AH1ID, AH2ID HAVING COUNT(ID) > 1

然後,我經歷了返回的行和刪除(或選擇ID)...

2)DELETE FROM AHsTransactions WHERE TypeID=$row[$i]['TypeID'] AND AH1ID=$row[$i]['AH1ID'] AND AH2ID=$row[$i]['AH2ID']

+0

你使用MySQL或SQL Server?它們不是同一件事。 –

+0

MSSQL,但移植到MySQL:/ – Mark

回答

0

您還必須id組。這就是錯誤信息告訴你的。將它添加到您的group by列表中。一般來說,如果它在您的選擇列表中,您還必須按它進行分組。

+0

但是,如果我按ID分組,那麼從來沒有COUNT(*)> 1 – Mark

+0

然後不按ID分組。那麼你的查詢沒有意義。 –

+0

如果您不想通過ID *計算事物數量,爲什麼ID會在選擇列表中?真的不清楚你想要做什麼。 –

1

添加IdGROUP BY子句中,它是強制性的,它存在於select語句組中添加的每一列:

SELECT ID 
FROM AHsTransactions 
GROUP BY ID, TypeID, AH1ID, AH2ID 
HAVING COUNT(*) > 1 
+0

@Tom感謝您的編輯 –

+0

但是,如果我通過ID分組,那麼從來沒有一個C 'mount(*)> 1 – Mark

+0

@馬克共享某些僞數據和所預期結果 –