mysql - 条件 SQL SELECT - 当返回集为空时,执行另一个 SELECT?

标签 mysql sql select conditional

我有一个网页,其“页面/文章”存储在 MySQL 数据库中。它还具有为不同页面显示不同侧面菜单的功能。所有这些(菜单、菜单项)都存储在数据库中。

这是我获取当前页面所有菜单项的 SQL:

SELECT * 
FROM menu_items 
   JOIN pages 
    ON menu_items.menu_id=pages.right_menu_id 
WHERE pages.link = "some_link"

并且有效。

我想要的是,当此查询返回一个空集时,执行另一个查询并获取其结果。可能吗 ??如果上面提到的查询为空,我想得到这个查询的结果:

SELECT * 
FROM menu_items 
WHERE menu_id=2;

这可能吗,还是我应该只用 PHP 来做?

最佳答案

您可以使用 EXIST 函数来测试当前页面是否有任何链接:

IF EXISTS(SELECT menu_id FROM menu_items JOIN pages ON menu_items.menu_id = pages.right_menu_id WHERE pages.link = "some_link") THEN

    SELECT   * 
    FROM     menu_items 
             JOIN pages 
                 ON menu_items.menu_id=pages.right_menu_id 
    WHERE    pages.link = "some_link" 

ELSE

    SELECT   * 
    FROM     menu_items 
             JOIN pages 
                 ON menu_items.menu_id=pages.right_menu_id 
    WHERE    menu_id = 2

END IF

你也可以这样尝试:

DECLARE @LinkCount INT
SELECT @LinkCount = COUNT(*) FROM menu_items JOIN pages ON menu_items.menu_id = pages.right_menu_id WHERE pages.link = "some_link"

SELECT   * 
FROM     menu_items 
         JOIN pages 
             ON menu_items.menu_id=pages.right_menu_id 
WHERE    (@LinkCount > 0 AND pages.link = "some_link") OR (@LinkCount = 0 AND menu_id = 2)

可能有更优雅的方法来执行此操作,但希望这对您有所帮助。

关于mysql - 条件 SQL SELECT - 当返回集为空时,执行另一个 SELECT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7572584/

相关文章:

mysql - 从mysql删除麻烦

MySQL嵌套集-选择节点的前N个子节点

c# - 填充 0 - MySQL

php - 通知表设计?

使用 GROUP BY 时 MySQL SUM 不起作用

mysql - 是有可能在mysql中重复相同的结果

php - 如何获取mysql中主结果中两个别名表结果的总和?

php - Mysql:在值更新之前锁定表以进行读取

c - 选择服务器多读问题

mysql错误选择输出