假设我有一个这样的表:
name | age | experience
abc | 18 | 0
def | 19 | 0
efg | 20 | 0
我想只在任何一个值大于零时选择体验列。
在这种情况下,我的SQL
查询应仅返回姓名和年龄,而不是经验。
如果让我们说“efg”的经验大于0,那么查询应该返回姓名,年龄和经验。 我试过以下查询
SELECT EXISTS (SELECT name,age,experience FROM emp_info )
AND NOT
EXISTS (SELECT experience FROM emp_info WHERE experience=0 );
但它没有用。
答案 0 :(得分:1)
试试这个: -
IF ((select max(experience)FROM emp_info) > 0)
SELECT name,age,experience FROM emp_info
ELSE
SELECT name,age FROM emp_info
答案 1 :(得分:1)
在几乎所有关系数据库中,您的查询都必须返回固定数量的列,即所有行的列数相同。所以你要求的是不合理的。由于表格支持参差不齐,你可能会在Informix
上使用这样的东西,但这是我唯一能想到的。
您拥有的其他选项包括在您的查询中序列化为JSON
,或生成XML
,但这有点先进,并且不清楚这是您想要的。
通常我们会在前端处理此问题,而不是在数据库查询中处理。
答案 2 :(得分:1)
SELECT name, age, NULLIF(experience, 0) from emp_info
您的问题有点棘手,因为根据结果返回不同的列可能不是您想要做的,您可以直接从代码中执行,而不是从SQL投影中执行。
答案 3 :(得分:0)
这可能有效:
if(experience > 0)
begin
SELECT name,age,experience FROM emp_info
end
else
begin
SELECT name,age FROM emp_info
end