Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用if语句从4个不同的表中选择记录_Mysql_Sql - Fatal编程技术网

Mysql 使用if语句从4个不同的表中选择记录

Mysql 使用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)

这里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) 
 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);