MySql CASE执行查询返回操作数应包含1列

时间:2018-03-28 08:27:37

标签: mysql case

以下代码返回操作数应包含1列。

SELECT 
CASE WHEN
(SELECT COUNT(1) FROM `student` WHERE `join_date` > '2017-03-21 09:00:00') > 0
THEN
(SELECT * FROM `student` >= CAST(CAST('2017-03-21 09:00:00' AS DATE) AS DATETIME)
END

但以下工作。为什么呢?

SELECT 
CASE WHEN
(SELECT COUNT(1) FROM `student` WHERE `join_date` > '2017-03-21 00:00:00') > 0
THEN
(SELECT `foo`)
ELSE
(SELECT `bar`)
END

如果我想根据检查结果执行检查并执行2个不同的查询。

我想实现以下结果(在sql中正常工作)

IF (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000
   EXECUTE (SELECT * FROM table1)
ELSE
   EXECUTE (SELECT * FROM table2)

2 个答案:

答案 0 :(得分:0)

如果你强制你的subselect tor只返回一行,也是第一个选择作品

  SELECT 
  CASE WHEN
  (SELECT COUNT(1) FROM `student` WHERE `join_date` > '2017-03-21 00:00:00') > 0
  THEN
  (SELECT * FROM `student` order by your_column limit 1)
  ELSE
  (SELECT * FROM `teacher` order by your_column limit 1)
  END

您还应该根据需要在列中添加正确的顺序(在名为your_column的示例中)以获取有效的第一行

答案 1 :(得分:0)

您可以使用UNION ALL从两个表中进行选择并排除条件。

SELECT * FROM `student`
WHERE EXISTS (SELECT * FROM `student` WHERE `join_date` > '2017-03-21 00:00:00')
UNION ALL
SELECT * FROM `teacher`
WHERE NOT EXISTS (SELECT * FROM `student` WHERE `join_date` > '2017-03-21 00:00:00')

请注意,表模式应该相同。