Mysql - 如果没有找到特定的记录,则获取默认记录

3

使用MySQL和php,我该如何在单个查询中获取与特定查询匹配的所有结果,但如果没有找到结果,则查找所有默认结果?例如,我有以下查询:

SELECT * FROM table1 WHERE typeid = 5

如果查询结果为空,则需要查找table1中所有typeid为1的结果:
SELECT * FROM table1 WHERE typeid = 1

我该如何在一条查询语句中完成这个操作?如果我尝试以下查询语句,我会得到5和1两个结果:

SELECT * FROM table1 WHERE typeid = 5 OR typeid = 1

我想要查询table1中所有被分配给typeid为5的记录,如果没有找到结果,则在单个查询中获取所有分配给typeid = 1的结果。我该怎么做?还是必须使用两个查询?请注意,这适用于返回多个记录,而不是单个记录。
3个回答

5
这个怎么样?
SELECT * FROM table1
WHERE CASE WHEN (SELECT COUNT(1) FROM table1 WHERE typeid = 5) > 0 THEN
    typeid = 5
ELSE
    typeid = 1
END;

1
@eggyal:来得正是时候...这个问题让我困扰了一会儿。我不确定是否可以在WHERE子句中使用条件语句,因为我只在SELECT部分中使用过它们。 - Travesty3
+1 很好。这适用于多行。从技术上讲,我认为你可以省略 > 0 部分。 - Marcus Adams
@MarcusAdams:说得好,因为在MySQL中,0FALSE是相同的东西。 - Travesty3

2
SELECT *
FROM   table1
WHERE  typeid = IF((SELECT COUNT(*) FROM table1 WHERE typeid = 5), 1, 5);

0
    SELECT * 
    FROM table1 
    WHERE typeid = 5
  UNION ALL
    SELECT * 
    FROM table1 
    WHERE typeid = 1
      AND NOT EXISTS
          ( SELECT * 
            FROM table1 
            WHERE typeid = 5
          ) ;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接