关于在SQL中如何使用IF语句,我有一个问题,所以我有3个表。
每个表中的字段如下
user mechanics exchanges
------ ---------- ---------
name name id_user
id_user id_mecha id_mecha
message我想使用如下条件,如果user或mechanic的id与每个id的id匹配(user或mechanic),则将选择它们的名称和相应的message。
SELECT CASE
WHEN mechanics.id_mecha = exchanges.id_mecha
THEN mechanics.name, exchanges.message
WHEN users.id_user = exchanges.id_user
THEN users.name, exchanges.message
FROM users
JOIN mechanics
JOIN exchanges发布于 2015-02-19 01:07:29
双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发布于 2015-02-19 00:44:28
如果我正确理解,您需要在END中使用案例 in SELECT,并且需要为JOIN提供如下所示的ON
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发布于 2015-02-19 00:53:00
实际上,您需要一个带有JOIN和case语句的消息(假设一个特定的消息只能针对一个用户或一个特定的机械师-而不是同时在一行中同时使用):
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_mechahttps://stackoverflow.com/questions/28596658
复制相似问题