如果没有table1的结果,请从语句2中选择

时间:2014-10-08 22:06:51

标签: mysql sql

我希望用MySQL做一些我不确定在一个查询中是否可行或值得做的事情。

我有表A中的第1,2,3列,我感兴趣。

SELECT 1, 2, 3
FROM A
WHERE 1 = somevalue

如果上面没有出现,则表B中的OR 4,5,6列。

SELECT 4, 5, 6
FROM B
WHERE 4 = some value

我查看了case语句,但是我不太确定在另一个表中找到值的合适语法,如果第一个表中没有另一个值。

2 个答案:

答案 0 :(得分:0)

SELECT * 
FROM (
    SELECT 1,2,3, 'A' AS source
    FROM A
    WHERE 1 = somevalue

    UNION ALL

    SELECT 4,5,6, 'B'
    FROM B
    WHERE 4 = somevalue
) AS subs
ORDER BY source ASC
LIMIT 1

从两个表中获取两组记录,并按派生的"源"进行排序。领域。如果A表中没有匹配的记录,那么该子查询将不会返回任何行,并且您只会获得B条记录。

如果两个表都有匹配的记录,那么由于您按源表(AB)的名称进行排序,因此限制将确保只有第一行来自A表出现了。

答案 1 :(得分:0)

查看描述IF语句语法的this answer

我是一个SQL Server的人,所以我可能会弄错,但是这样的事情应该对你有用:

BEGIN
    IF ((SELECT BLAH FROM A) = BLAH) THEN
        SELECT BLAH FROM A;
    ELSEIF ((select BLAH from B) = BLAH) THEN 
        SELECT BLAH FROM B;
    END IF
END

您可能希望在SELECT count(*) FROM A WHERE X声明中执行IF之类的操作。