2012-07-11 82 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