我一直试图在SQL中显示一种特定类型的结果,但一直未能。我想这是可能的,但不知道怎么做。
我读过这篇文章,但没能解决我的问题。
我有4个表:sparametros(保存参数代码和说明)、sparametrosumericos(保存数值参数值及其代码)、sparametrostexto(保存文本参数及其值)、sparametrosemo(保存备注类型参数)
所有这些参数都可以通过参数代码连接,但是,参数代码在某种意义上是唯一的,例如,给定一个代码,比如说1210,假设它是一个文本类型参数,那么该代码既不存在于数字中也不存在于备忘录参数中。然而,它存在于一般的斯巴马特罗斯表中。换句话说,sparametros保存所有参数,其他表表示该主集合的子集合。
我试过使用left join,但没有得到结果。
这就是我目前所拥有的:
SELECT P.SPar00Id, P.SPar00Descripcion,
IF NOT ISNULL(N.SPar00NumValor) THEN
N.SPar00NumValor
ELSEIF NOT ISNULL(T.SPar00TextoValor) THEN
T.SPar00TextoValor
ELSE
M.SPar00MemoValor
FROM sparametros p
LEFT JOIN sparametrosnumericos N ON N.SPar00NumId = P.SPar00Id
LEFT JOIN sparametrostexto T ON T.SPar00TextoId = P.SPar00Id
LEFT JOIN sparametrosmemo M ON M.SPar00MemoId = P.SPar00Id
WHERE P.SIns00Id = 1 AND
N.SIns00Id = 1 AND
T.SIns00Id = 1 AND
M.SIns00Id = 1;
我现在正在使用MySQL(与Navicat客户机一起使用),但也需要能够在SQL Server中获得相同的结果。
执行此请求时得到的响应是:
“[Err]1064-您的SQL语法有错误;请检查对应于MySQL服务器版本的手册,以获取在”NOT ISNULL(N.SPar00NumValor)附近使用的正确语法,然后”
最佳答案
试试这个:
SELECT P.SPar00Id, P.SPar00Descripcion,
(CASE WHEN N.SPar00NumValor IS NOT NULL THEN N.SPar00NumValor
WHEN T.SPar00TextoValor IS NOT NULL THEN T.SPar00TextoValor
ELSE M.SPar00MemoValor
END) colName
FROM sparametros p
LEFT JOIN sparametrosnumericos N ON N.SPar00NumId = P.SPar00Id
LEFT JOIN sparametrostexto T ON T.SPar00TextoId = P.SPar00Id
LEFT JOIN sparametrosmemo M ON M.SPar00MemoId = P.SPar00Id
WHERE P.SIns00Id = 1 AND N.SIns00Id = 1 AND T.SIns00Id = 1 AND M.SIns00Id = 1;