2014-10-08 27 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