Sql 将子查询结果与两个参数对进行比较
我需要比较select查询中的2个参数和子查询中的2个参数。 例如:Sql 将子查询结果与两个参数对进行比较,sql,postgresql,subquery,Sql,Postgresql,Subquery,我需要比较select查询中的2个参数和子查询中的2个参数。 例如: SELECT * FROM pupil WHERE name NOT IN (SELECT name FROM bad_names) 此示例仅包含一个要比较的参数。但如果我需要将子查询结果与两个参数对进行比较,该怎么办? 这将有助于: SELECT * FROM pupil WHERE name||lastname NOT IN ( SELECT name||lastname FROM bad_name_la
SELECT *
FROM pupil
WHERE name NOT IN (SELECT name FROM bad_names)
此示例仅包含一个要比较的参数。但如果我需要将子查询结果与两个参数对进行比较,该怎么办?
这将有助于:
SELECT *
FROM pupil
WHERE name||lastname NOT IN (
SELECT name||lastname FROM bad_name_lastname_combinations)
所以字符串连接是实现这一点的唯一方法?您可以使用NOT EXISTS命令
select *
from pupil p
where not exists
(
select *
from bad_names bn
where bn.name = p.name
and bn.lastname = p.lastname
)
SELECT *
FROM pupil p
WHERE NOT EXISTS
(
SELECT 1
FROM bad_name_lastname_combinations b
WHERE b.name = p.name AND b.lastname = p.lastname)
)
您可以使用
左侧外部联接来执行此操作
:
SELECT p.*
FROM pupil p left outer join
bad_name_lastname_combinations bnlc
on p.name = bnlc.name and p.lastname = bnlc.lastname
WHERE bnlc.name is null;
PostgreSQL具有足够的灵活性,可以通过: 如第4.2.13节所述,这种形式的
不在中的左侧是行构造函数。右侧是一个带括号的子查询,它返回的列数必须与左侧行中的表达式数完全相同。左侧表达式将按行计算并与子查询结果的每一行进行比较。如果只找到不相等的子查询行(包括子查询不返回行的情况),则NOT IN
的结果为“true”。如果找到任何相等的行,则结果为“false”
因此,如果您正确编写行构造函数
,则可以直接执行此操作:
select *
from pupil
where (name, lastname) not in (
select name, lastname
from bad_last_name_combinations
)
演示:请解释您是如何得出解决方案的,而不仅仅是向OP给出答案,以便答案更一般。谢谢。如果您更改或更改,它将正常工作。@user1561346。我更喜欢左外连接方法,因为它是标准的SQL,任何数据库都支持它。。。。。。。。我想用数字(>=或
select *
from pupil
where (name, lastname) not in (
select name, lastname
from bad_last_name_combinations
)