该代码正在撤退我想要检索的内容,尽管它的执行量是我需要的四倍。
我有一个名为 property 的表,具有 PK property_ID 。属性具有标题,简短描述,详细描述,并且它属于兴趣点,其中转连接到一个城市。标题,简短描述和全部描述具有所有独立的链接表,其中在属性和转换表中的相应转换之间创建了链接。 我正在使用左联接来收集所有所需的信息,在图像附件的下方,您可以看到结果。
理想的结果是它将仅返回 2行,并带有相应的标题,简短描述和详细描述。目前是返回8行。
我注意到的问题是它以一种奇怪的方式对列进行排序。 如果您仔细观察,会发现 title 和 titleLangCode 在 titleLangCode 之后正确排序,而长短说明则由它们自己的< strong> langCode 。对它们进行分组不会起作用,因为它们的顺序不同,因此对它们进行排序没有任何效果,因为列号,联合也不起作用,甚至尝试了不同但无济于事。
代码:
select
property.*,
title_translation.title,
title_translation.langCode as titleLangCode,
short_desc_translation.shortDescription,
long_desc_translation.longDescription,
short_desc_translation.langCode as shortLangCode,
long_desc_translation.langCode as longLangCode,
property_city_poi.city_poi_link_ID
from
property
left join
title_link
on
property.property_ID = title_link.property_ID
left join
title_translation
on
title_link.title_link_ID = title_translation.title_link_ID
left join
short_desc_link
on
property.property_ID = short_desc_link.property_ID
left join
short_desc_translation
on
short_desc_link.short_desc_link_ID = short_desc_translation.short_desc_link_ID
left join
long_desc_link
on
property.property_ID = long_desc_link.property_ID
left join
long_desc_translation
on
long_desc_link.long_desc_link_ID = long_desc_translation.long_desc_link_ID
left join
property_city_poi
on
property.property_ID = property_city_poi.property_ID
where
property.property_ID = 10
是否有可能以某种方式将限制与组合并?我尝试过但没有成功。
title_link
title_link_ID
property_ID
dateCreated
title_translation
title_translation_ID
title_link_ID
langCode
title
short_desc_link
short_desc_link_ID
property_ID
dateCreated
short_desc_translation
short_desc_translation_ID
short_desc_link_ID
langCode
shortDescription
long_desc_link
long_desc_link_ID
property_ID
dateCreated
long_desc_translation
long_desc_translation_ID
long_desc_link_ID
langCode
shortDescription
答案 0 :(得分:2)
如果我正确理解这一点,则问题在于您有多个转换表,这些转换表与该属性具有一对多的关系。因此,在第一次加入后,您将拥有2行,然后是4行,然后是8行,并包含所有语言组合。
您可以通过加入2个条件来限制此限制。
... property p
INNER JOIN titel_link tl on p.id = tl.propertyid
INNER JOIN short_desk_link sdl on p.id = tl.propertyid AND tl.langCode = sdl.langCode
我对此做了一些简化,并为表名使用别名来缩短连接条件。
编辑:我想说这也是数据库设计不良的标志。您可能应该先引入一个表“语言”,然后再引入一个映射表属性-翻译映射。不知道这是否在您的控制之下,但是使用这样的表进行设置会更好。