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

时间:2011-09-27 16:34:10

标签: mysql sql select conditional

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

这是我获取当前页面所有菜单项的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中使用它?

2 个答案:

答案 0 :(得分:2)

您可以使用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)

这可能有更优雅的方式,但希望这会有所帮助。

答案 1 :(得分:2)

也许这不是最优雅的方式:

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

UNION ALL

SELECT *, NULL, NULL, NULL 
FROM menu_items 
WHERE 
    menu_id = 2 AND 
    NOT EXISTS (
        SELECT * 
        FROM 
            menu_items 
            JOIN pages ON menu_items.menu_id = pages.right_menu_id 
        WHERE pages.link = "some_link"
    )

注意:NULL的数量应与表页面中的列数相同。

相关问题