Mysql 选择关于案例的语句

Mysql 选择关于案例的语句,mysql,sql,select,case,Mysql,Sql,Select,Case,嗨,我正在尝试从一个表返回结果集。但是,我想在结果集中添加另一列,它来自不同的表 SELECT ID, NAME, CASE (SELECT STATUS FROM OTHERTABLE O WHERE O.ID = M.ID) WHEN '1' THEN 'In progress' WHEN '2' THEN 'Complete' END as STATUS FROM MAINTABLE M 我收到错误消息: 子查询返回了多

嗨,我正在尝试从一个表返回结果集。但是,我想在结果集中添加另一列,它来自不同的表

SELECT ID, NAME,
       CASE (SELECT STATUS FROM OTHERTABLE O WHERE O.ID = M.ID)
          WHEN '1' THEN 'In progress'
          WHEN '2' THEN 'Complete'
       END as STATUS
FROM MAINTABLE M
我收到错误消息:
子查询返回了多个值。这是不允许的…etc使用加入并组织您的案例

SELECT 
  M.ID,
  M.NAME,
  CASE
    WHEN O.STATUS = '1' 
    THEN 'In progress' 
    WHEN O.STATUS = '2' 
    THEN 'Complete' 
  END AS STATUS 
FROM
  MAINTABLE M 
  JOIN OTHERTABLE O 
    ON (O.ID = M.ID)

使用“加入”并组织您的案例

SELECT 
  M.ID,
  M.NAME,
  CASE
    WHEN O.STATUS = '1' 
    THEN 'In progress' 
    WHEN O.STATUS = '2' 
    THEN 'Complete' 
  END AS STATUS 
FROM
  MAINTABLE M 
  JOIN OTHERTABLE O 
    ON (O.ID = M.ID)

这是因为MainTable Id在OtherTable中有多条记录

试试看

SELECT ID, NAME,
   CASE 
      WHEN O.STATUS = '1'  THEN 'In progress'
      WHEN O.STATUS = '2' THEN 'Complete'
   END as STATUS
FROM MAINTABLE M JOIN OTHERTABLE O ON O.Id = M.ID

这是因为MainTable Id在OtherTable中有多条记录

试试看

SELECT ID, NAME,
   CASE 
      WHEN O.STATUS = '1'  THEN 'In progress'
      WHEN O.STATUS = '2' THEN 'Complete'
   END as STATUS
FROM MAINTABLE M JOIN OTHERTABLE O ON O.Id = M.ID

也许你想要这个

SELECT ID, NAME,
       CASE WHEN O.STATUS = '1' THEN 'In progress'
            WHEN O.STATUS = '2' THEN 'Complete'
       END AS STATUS
FROM MAINTABLE M
INNER JOIN OTHERTABLE O ON O.ID = M.ID

也许你想要这个

SELECT ID, NAME,
       CASE WHEN O.STATUS = '1' THEN 'In progress'
            WHEN O.STATUS = '2' THEN 'Complete'
       END AS STATUS
FROM MAINTABLE M
INNER JOIN OTHERTABLE O ON O.ID = M.ID

在这种情况下,您需要的是联接,而不是子查询:

SELECT ID, NAME,
CASE O.STATUS 
  WHEN '1' THEN 'In progress'
  WHEN '2' THEN 'Complete'
END as STATUS
FROM MAINTABLE M
INNER JOIN OTHERTABLE O ON O.ID = M.ID;

在这种情况下,您需要的是联接,而不是子查询:

SELECT ID, NAME,
CASE O.STATUS 
  WHEN '1' THEN 'In progress'
  WHEN '2' THEN 'Complete'
END as STATUS
FROM MAINTABLE M
INNER JOIN OTHERTABLE O ON O.ID = M.ID;

根据错误消息,应使用限制1

SELECT M.ID, M.NAME,
    CASE WHEN O.STATUS = '1' THEN 'In progress'
         WHEN O.STATUS = '2' THEN 'Complete' 
    END as STATUS
FROM MAINTABLE M INNER JOIN OTHERTABLE O ON O.ID = M.ID LIMIT 1

根据错误消息,应使用限制1

SELECT M.ID, M.NAME,
    CASE WHEN O.STATUS = '1' THEN 'In progress'
         WHEN O.STATUS = '2' THEN 'Complete' 
    END as STATUS
FROM MAINTABLE M INNER JOIN OTHERTABLE O ON O.ID = M.ID LIMIT 1

如果你愿意读的话,错误信息中有一个很大的线索。对于某些特定的
ID
值,
OTHERTABLE
中有多行。是的,将
LIMIT 1
添加到子查询中,或者执行
MIN(STATUS)
等操作。但是您的子查询没有按预期工作。是的,我知道有多行。但是我的目标是从MAINTABLE M中的每一行从OTHERTABLE中获取一个状态值。resultset返回许多行。。我希望每一行都有来自OTHERTABLE的状态值。这两个表之间的公共列是id,如果您愿意阅读的话,错误消息中有一条非常重要的线索。对于某些特定的
ID
值,
OTHERTABLE
中有多行。是的,将
LIMIT 1
添加到子查询中,或者执行
MIN(STATUS)
等操作。但是您的子查询没有按预期工作。是的,我知道有多行。但是我的目标是从MAINTABLE M中的每一行从OTHERTABLE中获取一个状态值。resultset返回许多行。。我希望每一行都有来自OTHERTABLE的状态值。这两个表之间的公共列是ID