2010-10-31 67 views
2

這是我的表:另一種選擇,如果第一個SELECT返回一個空集

id id_1  camp 
1  0   x1  
2  0   x2 
3  0   x3 
4  1   x4 
5  1   x5 
6  1   x6 
7  3   x7 
8  3   x8 
9  3   x9 

我需要一個SQL的,如果有與「X」 id_1沒有行,它應該返回那些id_1爲0.例如,如果我選擇id_1 = 2,它將返回select * where id_1 = 0

這可以在一個聲明中完成嗎?使用IF EXISTS或CASE我運氣不多。語法......

感謝一如既往

回答

-3

如果有與「X」 ID_1沒有行,它應該返回那些具有0 ID_1你可以試試這個 -

IF EXISTS (SELECT * FROM mytable WHERE id_1 = 2) 
    SELECT * FROM mytable WHERE id_1 = 2 
ELSE 
    SELECT * FROM mytable WHERE id_1 = 0 
+0

這並沒有出於某種原因。但是這樣做: 'SELECT * FROM myTable WHERE id_1 = IF(EXISTS(SELECT id_1 FROM myTable WHERE id_1 = 2 LIMIT 1),2,0)'。謝謝。 – nevvermind 2010-10-31 09:12:14

+0

在發佈之前,我嘗試過使用sql server。但是,我的語法是不同的MySQL。 – pavanred 2010-10-31 09:15:34

0

不要忽視在代碼中實現此邏輯而不是SQL的方式。

2
SELECT SQL_CALC_FOUND_ROWS id, id_1, camp 
FROM your_table 
WHERE id_1 = 2 

UNION ALL 

SELECT id, id_1, camp 
FROM your_table 
WHERE 
FOUND_ROWS() = 0 AND id_1 = 0; 
1
SELECT * 
    FROM mytable 
    WHERE id_1 = 2 
UNION ALL 
    SELECT * 
    FROM mytable 
    WHERE id_1 = 0 
    AND NOT EXISTS 
     (SELECT * 
      FROM mytable 
      WHERE id_1 = 2 
     ) 
相關問題