2017-09-23 56 views
0

我一直在尋找答案,我發現了CASE,IFF和UNION,但我一直無法弄清楚,下面是我一直在嘗試的。如何運行第二個sql select如果第一個是空的?

SELECT * 
    FROM car_label as a 
    INNER JOIN car as b 
    ON a.label_id = b.label_id 
    WHERE a.car_id = 619 
UNION ALL 
SELECT * 
    FROM car 
    WHERE car_id = 619 

如果第一選擇返回空,我想運行第二個選擇吧。這第一部分完美地工作,SELECT * FROM car_label as a INNER JOIN car as b ON a.label_id = b.label_id WHERE a.car_id = :car_id,我只是想包括第二個選擇,以防第一個是空的。

更新:

Message: 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF (SELECT * FROM car_label as a INNER JOIN car as' at line 1' 

回答

3

試試這個:

SELECT * 
FROM car_label as a 
INNER JOIN car as b ON a.label_id = b.label_id 
WHERE a.car_id = 619 
UNION ALL 
SELECT * 
FROM car 
WHERE car_id = 619 
    AND NOT EXISTS (SELECT 1 
        FROM car_label as a 
        INNER JOIN car as b ON a.label_id = b.label_id 
        WHERE a.car_id = 619) 

因此,如果第一個查詢返回的任何數據,那麼NOT EXISTS將是真實的,因此第二個查詢條件將是真實和臺鉗反之亦然。

請注意,爲了使此查詢工作,返回的列應具有相同的計數和相同的數據類型,因此您可能需要列出列而不是*

然而,我想你可能需要嘗試LEFT JOIN因此,如果沒有匹配的汽車在car_label你還是會從car表中獲取數據:

SELECT b.* 
FROM car as b 
LEFT JOIN car_label as a ON a.label_id = b.label_id AND a.car_id = 619 
3

我不是很肯定你的查詢。至於我的理解,你可以去IF EXISTS

試試下面

MSSQL

IF EXISTS(SELECT * FROM car_label as a INNER JOIN car as b ON a.label_id = b.label_id WHERE a.car_id = 619) 
BEGIN 
     SELECT * 
     FROM car_label as a INNER JOIN car as b ON a.label_id = b.label_id 
     WHERE a.car_id = 619 
END 
ELSE 
BEGIN 
     SELECT * 
     FROM car 
     WHERE car_id = 619 
END 

MySQL的

IF (SELECT * FROM car_label as a INNER JOIN car as b ON a.label_id = b.label_id WHERE a.car_id = 619) THEN 
BEGIN 
     SELECT * 
     FROM car_label as a INNER JOIN car as b ON a.label_id = b.label_id 
     WHERE a.car_id = 619 
END; 
ELSE 
BEGIN 
     SELECT * 
     FROM car 
     WHERE car_id = 619 
END; 
END IF; 
+0

只是一些當我嘗試我一直收到IF中的pdo準備好了嗎?:消息:'SQLSTATE [42000]:語法錯誤或訪問衝突:106 4你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'IF EXISTS(SELECT * FROM car_label as'在第1行')使用正確的語法。 – Craig

+0

您使用的是SQL Server還是MYSQL? –

+0

我正在使用MySQL – Craig

相關問題