sql - 如何从子查询中获取两个值用于sql的where子句
问题描述
我必须在 where 子句中使用两个值来测试从子查询中获得的两个值是否相等。由于我正在处理现有应用程序,因此我想将其保留为子查询。以下是我的查询。
SELECT
o.EMAIL_ADDRESS, c.FIRST_NAME, p.PARTY_ID
FROM
ORDER o WITH (NOLOCK)
INNER JOIN
PARTY p WITH (NOLOCK) ON o.ORDER_ID = p.PARTY_ID
INNER JOIN
CUSTOMER c WITH (NOLOCK) ON p.PARTY_ID = c.CUSTOMER_ID
WHERE
(o.EMAIL_ADDRESS, c.CUSTOMER_ID) IN (SELECT EMAIL_ADDRESS, CUSTOMER_ID
FROM CUSTOMER_MASTER
WHERE insert_date > '01/02/2019')
我面临的问题是 where 子句中的第一个值 o.EMAIL_ADDRESS 引发以下错误:
在预期条件的上下文中指定的非布尔类型的表达式
当我在 where 子句中使用单个值时,它可以正常工作。
解决方案
一种方法是使用EXISTS
相关子查询。
SELECT o.EMAIL_ADDRESS, c.FIRST_NAME, p.PARTY_ID
FROM ORDER_HEADER oh WITH (NOLOCK)
INNER JOIN PARTY p WITH (NOLOCK) ON o.ORDER_ID = p.PARTY_ID
INNER JOIN CUSTOMER c WITH (NOLOCK) ON p.PARTY_ID = c.CUSTOMER_ID
WHERE EXISTS(
SELECT 1
FROM CUSTOMER_MASTER AS cm
WHERE cm.insert_date > '01/02/2019'
AND o.EMAIL_ADDRESS = cm.EMAIL_ADDRESS
AND c.CUSTOMER_ID = cm.c.CUSTOMER_ID
);
推荐阅读
- c++ - vcpkg "系统找不到指定的路径"
- c# - 将零和一的矩阵保存为位序列
- ubuntu - Ubuntu:内核 5.6.0-rc3:file_operations 中不支持 IOCTL?
- python - 更新:网格项目
- java - Java 无法识别 Windows 隐藏目录
- processing - 这叫什么以及如何实现!处理中的视觉效果
- reactjs - 我是 React 的新手,我不知道为什么这不起作用
- php - 用sql响应替换字符串中的'
- javascript - ReactJS:Axios 的异步请求返回“未定义”
- firebase - 使用flutter从firebase存储中获取文件