mysql - 如何在SQL中执行动态if语句?

标签 mysql sql select inner-join

我正在一个论坛上工作,就像每个论坛一样,有话题和回复。这些是我在数据库中用于存储它们的表:

post
------------
id
user_id
time
type
effective_id

thread
------------
id
update_time
text
response_number
deleted

response
------------
id
container_id
text
deleted

post.type 是一个 enum('thread', 'response'),并且 post. effective_id 必须匹配thread.idresponse.id 根据 post.type 指示。

如您所见,我正在分解线程和响应的所有共同点。


这是我遇到的问题:我想在单个查询中确定给定帖子是否已删除(将其 id 作为信息)无需将 deleted 字段移至帖子表

如果我事先知道给定的 id 属于线程还是响应,我将使用这些查询。

SELECT thread.deleted
FROM post INNER JOIN thread ON post.effective_id = thread.id

SELECT response.deleted
FROM post INNER JOIN response ON post.effective_id = response.id

但是我如何在 SQL 中说,“如果 post.type 是线程,则与线程进行 INNER JOIN 并获取删除的字段,如果 post.type 是响应,则与响应进行 INNER JOIN 并获取删除字段。 ”?我需要某种动态的“如果”

在指定的条件下这是否可能做到?

谢谢!

最佳答案

看一下下面查询中的案例:

SELECT CASE 
WHEN post.type = 'thread' THEN thread.deleted
WHEN post.type = 'response' THEN response.deleted
ELSE 'default'
END
FROM post 
LEFT JOIN thread ON post.effective_id = thread.id
LEFT JOIN response ON post.effective_id = response.id

关于mysql - 如何在SQL中执行动态if语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12126075/

相关文章:

MySQL 左连接和排除值

javascript - 我需要在 ASP.NET 中编写动态报表生成器代码,应该从哪里开始?

mysql - select * 是否总是返回相同的列顺序?

php - 如何在mysql中以任何格式搜索日期

PHP MySQL INSERT 由于唯一约束而失败

mysql - mysql存储过程无法识别的数据类型错误

mysql - 从数据库表中获取最后一条和第一条记录的替代方法

c# - 将 int 数组传递给存储过程的表值参数 - 转换失败

java - SQL 中的选择语句、联接和重新调整查询用途

mysql - sql select 两列中没有重复项