2014-10-08 56 views
0

我正在寻找一些与MySQL相关的事情,我不确定这些事情是否可能或值得在一个查询中完成。如果没有来自table1的结果,请从statement 2中选择

我有,将列1 2,3从表A我很感兴趣。

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

或列4,5,6从表B如果上述不出现。

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

我看着case语句,但我不是很确定适当的语法找到另一个表中的值,如果另一个不中的第一个存在。

回答

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表中的第一行通过。

+0

这将查询第二个表,即使第一个表确实包含结果,尽管 – Ciaran 2014-10-08 22:12:11

+0

好吧,在sql中没有规定“从中选择并从中选择,如果第一个没有返回任何东西” – 2014-10-08 22:13:25

+0

从效率的角度来看,对表A执行查询会更有意义,检查结果,如果没有,那么只有查询表B? – user2402831 2014-10-08 22:19:26

0

检出this answer描述IF语句语法。

我是一个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 

Preumably你想要做这样的事情SELECT count(*) FROM A WHERE XIF声明。

+0

只注意到“一个查询”位 - 这不是一个查询,但它是如何做到这一点。否则,我想你可以用次级选择做一些事情,但我非常怀疑它实际上会提高性能。 – Jeff 2014-10-08 22:56:26