我正在一个论坛上工作,就像每个论坛一样,有话题和回复。这些是我在数据库中用于存储它们的表:
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.id
或 response.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/