2011-02-25 67 views
1

我有一个表,如:需要MySQL特定语句获取主字和一个所有单词选择

ID word masterWord 
1 test 1 
1 test1 0 
1 test2 0 
2 look 0 
2 kiss 1 
2 eye 0 

现在我想从SELECT语句得到2个记录:

test  test1, test2 
kiss  look, eye 

第一列是主词,第二列是group_concat所有其他词。

表格中的主词用真(1)标记,并且ID是声明哪些词持有一组(同义词)。好吧,我知道我已经做出了愚蠢的单词,但是我为非英语单词做了这个,根据它的数量,性别等,一个单词有不同的结局......

每个ID必须有一个单词被选为主单词......如果这能帮助查询或不是我不知道;-)

回答

2

我认为像

SELECT MAX(CASE WHEN masterWord = 1 THEN word END) AS masterWord , 
     GROUP_CONCAT(CASE WHEN masterWord = 0 THEN word END) AS OtherWords 
FROM YourTable  
GROUP BY ID 

应该这样做。也许您可能还需要将CAST添加到GROUP_CONCAT输入中。

+0

你做到了,它真的有效,只解释不使用我的索引,我不知道必须索引什么。 – Jerry2 2011-02-25 13:14:25

+0

+1单通解决方案 – RichardTheKiwi 2011-02-25 13:15:05

+1

@ Jerry2没有可用的索引,这是一个全表扫描(1遍),因为它会涉及您的所有记录 – RichardTheKiwi 2011-02-25 13:15:38

2
select m.word, group_concat(w.word) wordlist 
from words m 
left join words w on w.masterword=0 and w.id=m.id 
where m.masterword=1 
group by m.id 
+0

这也很好。我不知道现在是谁选择的答案,你们都很棒:-( – Jerry2 2011-02-25 13:21:11

+0

Martin's最有可能更快,实际上,大约99.9%肯定 – RichardTheKiwi 2011-02-25 13:21:45

+0

Thanx的诚实,我会接受他的回答,但你的是有用的另外,它让我学到了一些东西 – Jerry2 2011-02-25 13:23:16

相关问题