2011-08-01 50 views
2

我有一個連接的mysql查詢,我希望每場比賽只獲得一個並非全部的一個。我的意思是。Mysql join每場比賽獲得一排

例如,我們有兩個表

ids(int id) 
colors(int id, varchar color) 

我有查詢

select ids.id, colors.color from ids join colors on ids.id = colors.id; 

,並得到以下

id | color 
------------------ 
1 | red 
1 | blue 
2 | yellow 
3 | green 
3 | pink 

我要查詢來獲取

id | color 
----------------- 
1 | red 
2 | yellow 
3 | green 

回答

3
select 
    ids.id, 
    min(colors.color) as color 
from 
    ids 
join 
    colors on ids.id = colors.id 
group by 
    ids.id 
; 
0

select ids.id, colors.color from ids join colors on ids.id = colors.id group by ids.id;

但要記住:你得到colors.color無擔保值。

+0

額外的注意,如果集團通過在這裏應用,會發生什麼非數字數據類型。它返回一個隨機值?在數字中,我們可以獲得SUM,average等。 –

+0

@shamim從[documentation](http://dev.mysql.com/doc/refman/5.6/en/group-by-hidden-columns.html): _服務器可以自由選擇每組中的任何值,因此除非它們相同,否則所選的值爲**不確定**。此外,每個組的值的選擇不能通過添加ORDER BY子句來影響。結果集的排序在選擇值後發生,而ORDER BY不會影響服務器選擇的值._ – Vlad

0
SELECT ids.id, colors.color FROM ids JOIN colors ON ids.id = colors.id GROUP BY ids.id 
0

謝謝您的回覆,大家說我通過當然使用組此方法是第一次,我試過,但我得到了以下錯誤:

Column "COLORS.COLOR" must be in the GROUP BY list; SQL statement:

我的查詢是

SELECT 
    ids.id, colors.color 
FROM ids 
    JOIN colors ON ids.id = colors.id 
GROUP BY ids.id; 

此外,我必須說你,我用的是h2database

4

嘗試使用這限制結果量的子查詢:

select ids.id, (select colors.color WHERE colors.id = ids.id LIMIT 1) AS color FROM ids;