2016-09-29 45 views
0

由於存在t3.Date,此腳本爲我提供了一個聚合錯誤。 有沒有另外的寫作方式呢?編寫此腳本的更好方法,以便它不返回聚合錯誤

SELECT t1.ID, t1.Date, t2.Type, t1.Username 
FROM t1 
INNER JOIN t2 
ON t1.CareID = t2.CareID AND 
t1.Date = t2.Date AND 
t1.Username = t2.Username 
LEFT JOIN t3 
ON t1.CareID = t3.CareID AND t1.Username = t3.Username 
GROUP BY t1.ID, t1.Date, t2.Type, t1.Username 
HAVING COUNT(*) = 1 AND t1.Date <= t3.Date 
+0

HAVING COUNT(*)指定表別名,並且您尚未針對t3應用group by,因此在關閉時不能使用 –

+0

@SandipPatel對不起,您可以擴展一下或粘貼示例嗎?謝謝 –

+0

這取決於什麼是「這個」。可能是t1.date Serg

回答

1

請嘗試使用下面的腳本。

SELECT t1.ID, t1.Date, t2.Type, t1.Username 
FROM t1 
INNER JOIN t2 
ON t1.CareID = t2.CareID AND 
t1.Date = t2.Date AND 
t1.Username = t2.Username 
LEFT JOIN t3 
ON t1.CareID = t3.CareID AND t1.Username = t3.Username AND t1.Date <= t3.Date 
GROUP BY t1.ID, t1.Date, t2.Type, t1.Username 
HAVING COUNT(t1.ID) = 1 
+1

該作品謝謝你 –

1

刪除:

AND t1.Date <= t3.Date 

HAVING條款,並將其放在ON子句LEFT JOIN的:

... 
LEFT JOIN t3 
ON t1.CareID = t3.CareID AND t1.Username = t3.Username AND t1.Date <= t3.Date 
GROUP BY t1.ID, t1.Date, t2.Type, t1.Username 
... 
1

你有陳述小姐別名,所以寫像Count(t1.Id)和也刪除AND t1.Date <= t3.Date從加入並加入聲明

SELECT 
    t1.ID, 
    t1.Date, 
    t2.Type, 
    t1.Username 
FROM t1 
INNER JOIN t2 ON t1.CareID = t2.CareID 
    AND t1.Date = t2.Date 
    AND t1.Username = t2.Username 
LEFT JOIN t3 ON t1.CareID = t3.CareID 
    AND t1.Username = t3.Username 
    AND t1.Date <= t3.Date 
GROUP BY t1.ID, t1.Date, t2.Type, t1.Username 
HAVING COUNT(t1.ID) = 1 
相關問題