2014-12-09 83 views
1

我一直试图在SQL中显示特定类型的结果,但一直未能。我想这是可能的,但不知道如何。 我读过这篇文章show only those columns which have data value但无法解决我的问题。 我有4个表:sparametros(保存参数代码和说明),sparametrosnumericos然而,通过它们的参数代码,参数代码是独一无二的,例如,给定一个代码,比如说1210,假设它是一个文本类型参数,那么代码不会以数字或备注参数存在。但它存在于一般的sparametros表中。换句话说,sparametros保存所有参数,其他表格表示该主集合的子集合。 我试过使用左连接,但无法获得结果。SQL加入不同的表并仅显示NOT NULL值

这是我到目前为止有:

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)THEN“

回答

1

试试这个:

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; 
+0

+一个纠正语法错误 – 2014-12-09 12:24:52

+0

不幸的是我得到与该查询没有结果。我不明白为什么,它看起来像你提供正确的说明。 – 2014-12-09 18:45:37