2012-07-11 102 views
0

我有一個像下面MySQL的返回,如果沒有記錄返回

 
------------------------- 
| aid | tid | dft | 
------------------------- 
| 1 | 1 | Y | 
------------------------- 
| 1 | 2 | N | 
------------------------- 
| 2 | 3 | Y | 
------------------------- 
| 3 | 4 | Y | 
------------------------- 
| 3 | 5 | N | 
------------------------- 

表我想查詢表,以獲得TID了基於援助TID但如果替代記錄TID不存在爲援助那麼它應該返回默認TID(由Y在DFT列標識)。

我已經試過這不會引發錯誤,但返回以下NULL

 
SELECT 

IF (
    t1.tid IS NOT NULL, 
    t1.tid, 
    (
     SELECT 
      t2.tid 
     FROM 
      table t2 
     WHERE 
      t2.aid = 1 
     AND t2.dft = 'Y' 
    ) 
) AS tid 
FROM 
    table t1 
WHERE 
    t1.aid = 1 
AND t1.tid = 3

作爲該代碼查找援助TID 1不存在,所以應該返回TID爲1,因爲這是在dft列中標記爲Y的值。

任何人都可以幫忙嗎?

回答

1

試試這個:

SELECT tid 
FROM table t1 
WHERE t1.aid = 1 
    AND t1.tid = 3 
UNION 
SELECT tid 
FROM table t1 
WHERE t1.aid = 1 
    AND t1.tid <> 3 
    AND dft = 'Y' 

如果aidtid組合是唯一的,那麼你可以使用此版本:

SELECT tid 
FROM table t1 
WHERE t1.aid = 1 
    AND (t1.tid = 3 OR dft = 'Y') 
ORDER BY dft LIMIT 1 
+0

謝謝。後者做到了這一點 - 真的很明顯,但是當你盯着太長的東西時,你知道它是什麼樣的!第二套眼睛總是很好。 – 2012-07-11 14:50:06

0

這將在MSSQL工作,但我沒有訪問MySQL服務器試試吧

SELECT TOP 1 * 
FROM table t1 
WHERE t1.aid=1 
ORDER BY CASE WHEN t1.tid=3 THEN 0 ELSE 1 END, CASE WHEN t1.dft='Y' THEN 0 ELSE 1 END