Mysql 使用if语句从4个不同的表中选择记录
这里userid将包含uid和前缀,对于staff,前缀是sMysql 使用if语句从4个不同的表中选择记录,mysql,sql,Mysql,Sql,这里userid将包含uid和前缀,对于staff,前缀是s 对于用户,它是p,我想获取发布查询的用户详细信息。您可以尝试以下操作: SELECT sup.qid,sup.title ,SUBSTRING(sup.userid, 1, 1) as t , CASE WHEN SUBSTRING(sup.userid, 1, 1) = "s" THEN select name from staff st where st.id= SUBSTRING(sup.userid, 2, 1)
对于用户,它是p,我想获取发布查询的用户详细信息。您可以尝试以下操作:
SELECT sup.qid,sup.title ,SUBSTRING(sup.userid, 1, 1) as t ,
CASE WHEN SUBSTRING(sup.userid, 1, 1) = "s"
THEN select name from staff st where st.id= SUBSTRING(sup.userid, 2, 1)
ELSE
when SUBSTRING(sup.userid, 1, 1) = "p"
THEN select name from users p where p.id= SUBSTRING(sup.userid, 2, 1)
END AS user name
FROM `support_queries` sup
我想把这个逻辑放在on子句中:
SELECT sup.qid,
sup.title,
SUBSTRING(sup.userid, 1, 1) AS t,
CASE SUBSTRING(sup.userid, 1, 1)
WHEN 's' THEN staff.name
WHEN 'p' THEN users.name
ELSE NULL
END AS user_name
FROM support_queries sub
LEFT OUTER JOIN users
ON SUBSTRING(sup.userid, 2, LENGTH(sup.userid) - 1) = users.id
LEFT OUTER JOIN staff
ON SUBSTRING(sup.userid, 2, LENGTH(sup.userid) - 1) = staff.id
或者更简单地说:
SELECT sq.qid, sq.title, LEFT(sup.userid, 1) AS t,
COALESCE(s.name, u.name) as user_name
FROM support_queries sq LEFT JOIN
users u
ON SUBSTRING(sq.userid, 2) = u.id AND
LEFT(sq.userid, 1) = 'p' LEFT JOIN
staff s
ON SUBSTRING(sq.userid, 2) = s.id AND
LEFT(sq.userid, 1) = 's';
请提供示例数据和示例数据的预期结果。您使用的是MySQL还是MS SQL Server?不要标记未涉及的产品。@jarlh语法看起来更像mysql,让我们删除othera case表达式不能用作流控制。它只能返回一个值。此外,子查询只能返回单个值(除非用于in、exists或作为派生表)。
SELECT sq.qid, sq.title, LEFT(sup.userid, 1) AS t,
COALESCE(s.name, u.name) as user_name
FROM support_queries sq LEFT JOIN
users u
ON sq.userid = CONCAT('p', u.id) LEFT JOIN
staff s
ON sq.userid = CONCAT('s', s.id);