我正在尝试将select语句的每一行与参考行进行比较。
因此,要将其放在上下文中,我想找到参考行,该行是我们其中一位用户的帐户详细信息。
SELECT id, first_name
FROM account
WHERE id = '100'
将返回有关用户的信息
然后我想运行SELECT语句以返回所有用户-非常简单
SELECT id,first_name
FROM account
对于每一行,我想将first_name与参考行进行比较。如果相同,则返回“ 1”;如果不同,则返回“ 0”
如果我输入要比较的值,例如“ Paul”,我就可以这样做
SELECT id,first_name,
CASE
WHEN first_name = 'Paul' THEN '1'
ELSE '0'
END
FROM account
但是显然我想用上面引用行中的first_name代替Paul。
我的谷歌搜索建议我先声明一个变量,然后再使用SELECT INTO变量
DO $$;
Declare
@reference_first_name text;
BEGIN
SELECT first_name
into @reference_first_name
FROM account
WHERE id = ‘100’
END;
但是我似乎无法将它们放在一起。
然后更进一步,是否可以引用多个列?
答案 0 :(得分:1)
您可以在子查询中简单地做到这一点:
SELECT
id,
first_name,
CASE
WHEN (SELECT first_name FROM users WHERE id = 100) = first_name THEN 1
ELSE 0
END
FROM users;
其他方式使用CTE或JOIN(有关这些版本,请参见小提琴)
答案 1 :(得分:1)
这里还有一个使用outer join
的选项:
select a.id, a.first_name, case when a.first_name = b.first_name then 1 else 0 end
from account a
left join account b on b.id = 100
答案 2 :(得分:0)
将correlated subquery
用作:
select a.id, a.first_name,
( select count(*)
from personnel p
where p.id = 100
and upper(p.first_name) = upper(a.first_name) ) as flag
from account a;
提供一个名为personnel
的表,并为所有比较固定一个ID。