SQL-以最佳值联接,否则以默认值联接

马里乌斯DV

我有两个表:

  • 监视列表
media_id saved_language
000001
000002
  • 媒体
media_id media_title data_language
000001 英文标题
000002 英文标题
000002 意大利语标题

我想加入这两个表,其中media_id相同,但是如果可以的话,语言必须是我输入的常量(例如“ it”),否则它应该使用将始终存在的监视列表中保存的默认语言。

我写的查询是这样的:

SELECT * FROM watchlist
LEFT JOIN media 
   ON media.media_id = watchlist.media_id 
   AND (media.data_language = "it" OR media.data_language = watchlist.saved_language)

但是,使用简单的OR显然可以同时获得两种语言。我已经尝试过使用CASE,但是结果相同。我想要的是为每个media_id保留一行,其中语言最好是“ it”,或者,只有在媒体表中不存在该语言时,才使用监视列表中保存的那行,该行将始终具有匹配项。

我想要的结果示例:

media_id media_title saved_language data_language
000001 英文标题
000002 意大利语标题
戈登·利诺夫(Gordon Linoff)

您可以使用窗口功能:

SELECT w.*
FROM (SELECT wl.*, m.*,
             ROW_NUMBER() OVER (PARTITION BY wl.media_id
                                ORDER BY (CASE m.data_language WHEN 'it' THEN 1 ELSE 2 END)
                               ) as seqnum
      FROM watchlist wl LEFT JOIN
           media m
           ON m.media_id = wl.media_id AND
              m.data_language IN ('it', wl.saved_language)
     ) w
WHERE seqnum = 1;

但是,如果您只想要标题,那么两个联接似乎更简单:

select wl.*, coalesce(m_it.title, m_saved.title) as title
from watchlist wl left join
     media m_it
     on m_it.media_id = wl.media_id and
        m_it.language = 'it' left join
     media m_saved
     on m_saved.media_id = wl.media_id and
        m_saved.langauge = wl.saved_language;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL-以最佳值联接,否则以默认值联接

来自分类Dev

SQL可选联接和默认值

来自分类Dev

SQL空值内部联接

来自分类Dev

如果条件匹配,则查找列中字段总和的 SQL 查询,否则返回默认值

来自分类Dev

SQL Server 2005中的交叉联接值

来自分类Dev

SQL左联接具有多个值

来自分类Dev

SQL:联接表也显示空值

来自分类Dev

sql查询联接和连接值

来自分类Dev

实体框架的SQL列默认值

来自分类Dev

可以计算SQL默认值吗?

来自分类Dev

SQL Server-默认值

来自分类Dev

在SQL查询中设置默认值

来自分类Dev

返回两个SQL表的最佳值以及表2中不匹配的表1中的值

来自分类Dev

SQL在三个联接表上查找值

来自分类Dev

SQL在联接表上计数唯一的真实值

来自分类Dev

SQL:联接后在列上获取特定的行值

来自分类Dev

具有空值的SQL多联接

来自分类Dev

SQL联接不存在值的单个表

来自分类Dev

如何在SQL联接中使用值总和

来自分类Dev

使用基本联接进行SQL查询多个值

来自分类Dev

SQl查询联接并将重复的列值设置为null

来自分类Dev

如何在SQL中使用舍入值进行联接

来自分类Dev

使用内部联接时具有不同值的SQL查询

来自分类Dev

SQL Server:基于记录相关值的表联接

来自分类Dev

SQL具有多个联接的记录的重复值

来自分类Dev

SQL-用与列值相似的词联接表

来自分类Dev

SQL表本身联接,但允许值为“ 0”

来自分类Dev

SQL选择最大值4个联接

来自分类Dev

根据一列值联接SQL表中的多行