如果没有返回记录,MySQL返回备用记录

时间:2012-07-11 13:40:58

标签: mysql

我有一张如下表格

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

我想根据援助 tid 查询表格以获取 tid ,但是如果 tid aid 不存在,那么它应该返回默认的 tid (由 dft 列中的Y标识)。

我尝试过以下操作但不会抛出错误但返回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 3,其中 tid 1不存在,因此应该返回 tid 1,因为这是什么在 dft 列中标记为Y.

有人可以帮忙吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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