在 MySQL 中加入 CASE

Posted

技术标签:

【中文标题】在 MySQL 中加入 CASE【英文标题】:Joining on a CASE in MySQL 【发布时间】:2010-11-11 07:40:59 【问题描述】:

尝试在 mysql 中实现多态关联。我认为代码可能看起来像这样:

SELECT
...
FROM
resource
LEFT JOIN (
     CASE resource.owner_type
       WHEN 'meeting' THEN
         ( SELECT * FROM meeting ) as owner
       WHEN 'todo' THEN
         ( SELECT * FROM todo ) as owner
      END)

但 CASE 导致语法错误。如何正确重写?

【问题讨论】:

相关***.com/questions/1255492/conditional-join-in-mysql 一个问题是确保您在输出中有一组一致的列 - 您不能让会议行包含与待办事项行不同的列数。 【参考方案1】:

简短的回答是您不能逐行替换联接 - 但我相信这是您想要实现的解决方案:

SELECT
...
FROM
resource
LEFT JOIN meeting ON resource.id=meeting.resource_id
WHERE resource.owner_type='meeting'
UNION
SELECT
...
FROM
resource
LEFT JOIN todo ON resource.id=todo.resource_id
WHERE resource.owner_type='todo'

【讨论】:

以上是关于在 MySQL 中加入 CASE的主要内容,如果未能解决你的问题,请参考以下文章

在 MySQL 中加入 CASE

在 MySql 中加入和求和?

在 MySQL 中加入表的转置

在 Debezium 中加入:MySQL 到 Elasticsearch

如何在mysql中加入3个表

在 MySQL 中加入“时间相似性”