說我有兩個表:GROUP BY主鍵時,如何避免聚合函數和子查詢?
- 對象
- ID
- 名
- object_event
- ID
- OBJECT_ID
- 型
- 日期
我想抓住一切有一個日期範圍內的事件發生的對象。我想爲每個對象獲取最多一行,但同一對象上的許多事件可能發生在日期範圍內。下面的查詢給我id
正是我想要:
SELECT object.id
FROM object
JOIN ON object.id = object_event.object_id
WHERE object_event.date < ...
GROUP BY object.id
這是正常的,但如果我想要什麼的對象表中的其他領域呢?我不能讓他們聚集函數(name
是一個字符串),但由於id
是object
的主鍵,還有一個函數依賴說法存在類似沒有歧義:
SELECT object.*
<rest of query same as above>
MySQL允許這個,但MS SQL不。我知道我可以用子查詢解決這個問題,但我想避免這種情況。
任何你不喜歡子查詢的原因? – Jacob
我不明白爲什麼如果列處於對象範圍內,您不能將它們包括在查詢中,因爲您已經將該列分組到了該表中最獨特的列。 – Mikeb
這聽起來像DISTINCT可能會幫助你。這應該在正常的連接中工作,並且子查詢沒有太多錯誤 - 如果它們解決了你的問題。 – Randy