MySQL:当右表中存在一个或另一个值时,只在左连接中显示一条记录
我有一个包含以下条目的表格:MySQL:当右表中存在一个或另一个值时,只在左连接中显示一条记录,mysql,Mysql,我有一个包含以下条目的表格: id name id_language 1 San Paolo Stadium 2 1 Stadio San Paolo 1 1 Stade San Paolo 3 2 Castel Nuovo 1 2 Maschio Angioino 2 3 Abbazia di Sant'Antimo 1 4 Fontana di
id name id_language
1 San Paolo Stadium 2
1 Stadio San Paolo 1
1 Stade San Paolo 3
2 Castel Nuovo 1
2 Maschio Angioino 2
3 Abbazia di Sant'Antimo 1
4 Fontana di Trevi 1
4 Trevi Fountain 2
4 Trevi-Brunnen 3
第一列属于一个名为“Places”的表,其中包含关于某个“place”的信息。第二列和第三列属于另一个名为“名称”的表,其中包含这些地名的各种语言名称,由“id_language”值标识。这两个表通过“一对多关系”连接,其中一个“位置”可以有一个或多个不同语言的“名称”
我希望通过查询显示每个位置的一个且仅一个名称,条件如下:
1) 如果存在某个地方的名称,且该名称具有给定给查询的特定id_语言,则仅打印该名称;
2) 否则,用另一种id_语言打印该地点的名称
示例:我希望所有的地方都有一个id_language=2的名称。没有id_language=2的名称的位置将以包含id_language=1的名称打印,如下所示:
id name id_language
1 San Paolo Stadium 2
2 Maschio Angioino 2
3 Abbazia di Sant'Antimo 1
4 Trevi Fountain 2
原始查询:
SELECT places.id,
name_descriptions.name,
name_descriptions.id_language
FROM places
LEFT JOIN places_name_descriptions ON places.id = places_name_descriptions.id_places
LEFT JOIN name_descriptions ON places_name_descriptions.id_name_description = name_descriptions.id
ORDER BY places.id, name_descriptions.name ASC
那么您的查询在哪里呢?呃,我在问:但是至少您应该显示您已经尝试过的内容。我显示原始查询以显示本文中的第一个表:
SELECT
placesid,
name\u descriptions
name,name_description.id_language FROM
places`LEFT JOINplaces_name_description
id
=places_name_description
id_places
LEFT JOINplaces_name_description
上的name_descriptionname\u descriptions
id
ORDER BY places.id,name\u descriptions
name
ASC`@meda这就是问题所在,我不知道该怎么办。在Where子句中使用“or”并按位置id分组,它将随机抽取名称。