PostgreSQL server, script.
问题来自 if-then 子句语法。
编写 SQL 查询时遇到问题。
这个想法是执行以下操作:如果某人拥有所有三个 *name-s,那么 fname 应该是三列的集合。
如果客户没有第二个名字,则 concat 仅采用姓氏和姓名列(以便更好地表示(。
问题是 pgAdmin 给出错误:"错误:错误:语法错误(:"如果"( 第 1 行:如果 (">
你能帮助解决提到的问题吗?
if (
select second_name from bank.person is NULL)
then (
select concat(name,' ',surname) as fname, age
from bank.person sp
where creation_date = (select max(creation_date) from bank.person)
or creation_date = (select min(creation_date) from bank.person);)
else (
select concat(name,' ',second_name,' ',surname) as fname, age
from bank.person sp
where creation_date = (select max(creation_date) from bank.person)
or creation_date = (select min(creation_date) from bank.person);)
end if;
SQL没有IF子句,但它确实有CASE表达式,在许多情况下可以用来做同样的事情。 我认为您将SQL本身与过程语言(如PL/pgSQL(混淆了,您可以在其中嵌入SQL。
你不需要 IF,只需使用concat_ws()
- 它可以正确处理 NULL 值和空字符串。
select concat_ws(' ', name, second_name, surname) as fname,
age
from bank.person
where creation_date = (select max(creation_date) from bank.person)
or creation_date = (select min(creation_date) from bank.person);
请注意,您可以将两个子选择合并为一个,从而使查询更加高效。
select concat_ws(' ', p.name, p.second_name, p.surname) as fname,
p.age
from bank.person p
join (
select max(creation_date) as max_date,
min(creation_date) as min_date
from bank.person
) t on p.creation_date in (t.max_date, t.min_date);