让我们考虑一下示例:我有以下表格 - TableA包含人员,TableB包含这些人的语言技能。描述person的每一行在TableB中都可以没有,一行或多行。示例如下:
People
+-----+--------+
| pId | Name |
+-----+--------+
| 0 | Thomas |
| 1 | Henry |
| 2 | John |
+-----+--------+
Skills
+-----+-----+----------+---------------+
| lID | pId | Language | LanguageSkill |
+-----+-----+----------+---------------+
| 0 | 0 | Dutch | 0 |
| 1 | 0 | French | 4 |
| 2 | 0 | Italian | 2 |
| 3 | 2 | Italian | 2 |
+-----+-----+----------+---------------+
托马斯知道荷兰语,法语和意大利语,亨利不懂任何外语,约翰知道意大利语。
我想得到的是TableA中每个人最熟悉的语言:
+--------+----------+
| Name | Language |
+--------+----------+
| Thomas | French |
| Henry | NULL |
| John | Italian |
+--------+----------+
我觉得这很容易,但不知道如何以简单的方式实现它。
感谢您的回复。
答案 0 :(得分:1)
您需要使用以下查询为每个人获取最佳语言:
SELECT pid, language
from TableB
group by pid
having languageskill = max(languageskill)
然后将其加入People表:
SELECT a.name, b.language
from TableA a
LEFT JOIN
(
SELECT pid, language, languageskill
from TableB
group by pid
having languageskill = max(languageskill)
) b
ON a.pid = b.pid
当然,如果这个人有“绑定”字样,这种方法不会超过一行。最好的语言,你会失去关于'捆绑'最好的语言。