我有一個問題,使用獨特的*。我有一個表,作爲一個加入,我試圖做一個聲明,如:使用不同於*
SELECT DISTINCT Name, * FROM table_a JOIN table_a.id=table_b.id WHERE status=1
但它不允許我這樣做。有沒有使用Distinct with *選項的方法?
我有一個問題,使用獨特的*。我有一個表,作爲一個加入,我試圖做一個聲明,如:使用不同於*
SELECT DISTINCT Name, * FROM table_a JOIN table_a.id=table_b.id WHERE status=1
但它不允許我這樣做。有沒有使用Distinct with *選項的方法?
我目前無權測試此權限,但我懷疑問題不在於distinct
,而是您在每個表中都有相同名稱的列(如id
),並且它不知道哪個在兩個相互衝突的列中進行選擇。如果你做select distinct table_a.*, table_b.* ...
,它會改變嗎?
使用select distinct_table。*,table_b。*它不再產生錯誤,但是當我這樣做時,distinct也不起作用 – 2010-11-21 15:20:32
@Devin - 然後選擇您想要明確選擇的列,並列出它們而不是使用「*」。 – tvanfosson 2010-11-21 18:37:35
好的,我明白了,謝謝! – 2010-11-22 00:46:09
DISTINCT *
可能會返回所有行,因爲它們是不同的:-)
要獲得所有不同的名稱使用DISTINCT name
或檢索有關名稱一些統計數據(例如計數)使用SELECT name, COUNT(*) FROM ... GROUP BY name
。
目前尚不清楚你想要做什麼。
也許你想只返回一個給定名稱的列(不是兩個id列)。
在這種情況下,標準的SQL查詢是這樣的:
SELECT * FROM table_a JOIN table_b USING (id) WHERE status=1
關鍵字DISTINCT裝置,在進行選擇之後,重複的行被消除(不重複的列名)。
基本上解決方案更是這樣的:
SELECT *
FROM table_a, table_b
JOIN table_a.id = table_b.id
WHERE status = 1
GROUP BY table_a.name
這是有用的,如果你想避免屬性的枚舉。當你這樣做,並且關係改變(一個屬性被刪除或添加)時,你的查詢將不起作用。
這是一個非常古老的問題!你的語法無效(提示:你的'FROM'子句不應該包含一個名爲'table_b'的表嗎?)我懷疑答案是'SELECT * FROM table_a NATURAL JOIN table_b WHERE status = 1;' – onedaywhen 2012-04-23 10:43:34
@onedaywhen:對不起,我剛修改了缺失的詞彙。你的答案是什麼意思?接受的答案不起作用,並且在使用'*'時它不能解決'DISTINCT'的問題。 – Dyin 2012-04-23 10:52:38
您修改的查詢返回重複的列。當然,我只能猜測,但我認爲OP需要不同的列(而不是不同的行),「NATURAL JOIN」是實現這一目標的好方法。 – onedaywhen 2012-04-23 12:16:04
我們在談論哪種SQL方言?另外,你確定DISTINCT是否是問題,而不是'Name,*'部分? – 2010-11-21 14:46:27
爲什麼這個標籤'mysql'和'postgresql'? – 2010-11-21 14:48:01
什麼是錯誤信息? – JJJ 2010-11-21 14:50:57