我有一张如下表格
------------------------- | 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.
有人可以帮忙吗?
答案 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'
如果aid
和tid
的组合是唯一的,那么您可以使用此版本:
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