0

我有一张如下表

-------------------------
| 援助| 时间 | 自由度 |
-------------------------
| 1 | 1 | 是 |
-------------------------
| 1 | 2 | N |
-------------------------
| 2 | 3 | 是 |
-------------------------
| 3 | 4 | 是 |
-------------------------
| 3 | 5 | N |
-------------------------

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

我尝试了以下不会引发错误但返回 NULL

选择

如果 (
    t1.tid 不为空,
    t1.tid,
    (
        选择
            t2.tid
        从
            表 t2
        在哪里
            t2.aid = 1
        AND t2.dft = 'Y'
    )
) 作为潮
从
    表 t1
在哪里
    t1.aid = 1
和 t1.tid = 3

由于该代码正在使用不存在的辅助1查找tid 3,因此应返回 1 的tid ,因为这在dft列中标记为 Y。

有人可以帮忙吗?

4

2 回答 2

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
于 2012-07-11T13:45:01.480 回答
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
于 2012-07-11T13:48:30.000 回答