Mysql 在SQL中使用IF/CASE条件

Mysql 在SQL中使用IF/CASE条件,mysql,sql,Mysql,Sql,关于如何在SQL中使用IF语句,我有一个问题,因此我有3个表 使用者 力学 交换 每个表中的字段如下所示 user mechanics exchanges ------ ---------- --------- name name id_user id_user id_mecha id_mecha message 我想使用如下条件

关于如何在SQL中使用IF语句,我有一个问题,因此我有3个表

  • 使用者
  • 力学
  • 交换
每个表中的字段如下所示

 user        mechanics      exchanges
------      ----------      ---------
name         name           id_user
id_user      id_mecha       id_mecha 
                            message
我想使用如下条件,其中我将选择
用户
技工
的名称及其相应的
消息
,如果他们的
id
交换
为他们中的每一个人(
用户
技工
)匹配


如果我理解正确,您需要
结束
中的
选择
,并且您需要为
加入
打开
,如下所示

SELECT CASE  
         WHEN mechanics.id_mecha = exchanges.id_mecha  THEN  mechanics.name
         WHEN users.id_user = exchanges.id_user THEN users.name 
       END,
       exchanges.message
FROM  users u
JOIN mechanics m ON users.id_user = exchanges.id_user
JOIN exchanges e ON mechanics.id_mecha = exchanges.id_mecha

事实上,您需要一个带有
case
语句的
JOIN
(假设一条特定消息只能针对某个用户或某个特定的技工,而不能同时针对两个用户或技工):


双重
连接将在机械师和用户之间产生完全的交叉积。这可能不是你想要的。您应该对每个表使用一个联接,然后将它们与
UNION
组合

SELECT m.name, e.message
FROM mechanics AS m
JOIN exchanges AS e ON m.id_mecha = e.id_mecha

UNION

SELECT u.name, e.message
FROM users AS u
JOIN exchanges AS e ON m.id_user = e.id_user

您缺少
CASE
@Barmar的
END
关键字,哦,是的,很抱歉,谢谢您的评论。答案经过编辑。你是对的,我不希望机械师和用户之间有一个完全的交叉产品,所以这个联盟对我来说很好,非常感谢。
SELECT case 
       when e.id_user is null then m.name
       when e.id_mecha is null then u.name
       else null end,
       e.message
from exchanges e join users u on e.id_user=u.id_user
     join mechanics m on e.id_mecha=m.id_mecha
SELECT m.name, e.message
FROM mechanics AS m
JOIN exchanges AS e ON m.id_mecha = e.id_mecha

UNION

SELECT u.name, e.message
FROM users AS u
JOIN exchanges AS e ON m.id_user = e.id_user