如何从mysql中的多对多关系中获取一行

时间:2015-04-29 18:28:50

标签: mysql

tables

id name   (sources)
-- ----
1  first
2  second

source_id tag_id   (source_tags)
--------- ------
1         1
1         2
2         3

source_id tag_id exception_value   (source_tag_exceptions)
--------- ------ ---------------
1         2      1
1         1      2 

id name   (tags)
-- ----
1  tag_one
2  tag_two
3  tag_three

sql import file
sqlfiddle

我有源和源标签的一对多关系。如果有可用的话,我希望显示source_tag_exceptions.exception_value。当我做一个简单的LEFT JOIN时,我为每个source_tag得到一行。我理解为什么,但是如何只为source_tag_exceptions显示一行并仍然显示所有源行?如果有多行,我宁愿看到值1超过任何其他行...

这是我正在使用的返回多行的查询

SELECT sources.name, source_tag_exceptions.exception_value
FROM sources
LEFT JOIN source_tags ON source_tags.source_id = sources.id
LEFT JOIN source_tag_exceptions ON source_tag_exceptions.source_id = sources.id AND source_tag_exceptions.tag_id = source_tags.tag_id

当前结果

name   exception_value
----   ---------------
first  1
first  2
second NULL

目标结果

name   exception_value
----   ---------------
first  1
second NULL

0 个答案:

没有答案