2015-06-26 17 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

@马克共享某些伪数据和所预期结果 –