我有以下名为'content'的SQL表:
| 语言|内容ID|正文|
| - -|- -|- -|
| 英文|一个|你好|
| 鹿|一个|哈罗|
| 英文|2个|世界|
我的目标是查询与language ='de'匹配的所有行。
但如果存在language ='en'的行,而该行没有language ='de'的计数器部分,我希望将其包含在查询结果中。
我期望的输出是:
| 内容ID|正文|
| - -|- -|
| 一个|哈罗|
| 2个|世界|
这个问题是在设计多语言页面时出现的。我的查询应该防止在“de”页面上没有显示文本,而是显示默认的“en”文本。
我尝试使用CASE和EXISTS语句解决此问题,但没有成功。
2条答案
按热度按时间mpgws1up1#
这是一个
LEFT JOIN
,如果不为空,它总是提取一个带有'de'语言的值,否则它获取带有相同contentId
但带有'en'语言的行。或者更好地解释一下,它假设
contentId
的所有值都有一行是“en”语言,并且它会将它们中的每一个与一行连接,该行具有相同的contentId
,但在“de”中(如果存在)。如果存在,它会从“de”中提取文本,否则从“en”中提取文本。让我知道它是否工作,它是足够清楚。否则你应该熟悉
LEFT JOINs
https://www.w3schools.com/sql/sql_join_left.aspztmd8pv52#
我设法提出了以下解决方案,它不使用
JOIN
:它看起来像是上述答案的有效替代方案(可能效率较低?)