sql - T-SQL:检查表中是否存在数据
问题描述
我正在使用一个视图来检查数据是否存在于另一个表中,如果它存在则显示连接到该表的行数。现在我想知道是否有更快的方法来做到这一点,因为我只对有数据感兴趣,而不需要有多少数据行。我想当它不需要计数时会更快。
这是我现在使用的:
SELECT
dbo.user.id,
dbo.user.userCode,
COALESCE (TotalProducts.ProductsInback, 0) AS ProductsInback
FROM
dbo.user
LEFT OUTER JOIN
(SELECT COUNT(id_product) AS ProductsInback, userCode
FROM dbo.Product
GROUP BY userCode) AS TotalProducts ON dbo.Product.userCode = TotalProducts.userCode
WHERE
dbo.user.userCode = 'XYZ'
现在一切正常,它给了我连接到商店后面的用户 XYZ 的产品数量。但是我只想知道用户在商店后面是否有产品,我不需要知道有多少。在我看来,这似乎是一个更快的解决方案(无论如何走到商店后面)。所以用 ... 替换 COUNT ?
解决方案
你是对的,为了查找数据是否存在于另一个表中,我们使用EXISTS
or IN
,因为我们不必遍历所有匹配的行,而是可以在找到的第一个行处停止。
EXISTS
:
SELECT
id,
userCode,
CASE WHEN EXISTS (SELECT * FROM dbo.Product p WHERE p.userCode = u.userCode )
THEN 1 ELSE 0 END AS ProductsInback
FROM dbo.user u
WHERE u.userCode = 'XYZ'
IN
:
SELECT
id,
userCode,
CASE WHEN userCode IN (SELECT userCode FROM dbo.Product)
THEN 1 ELSE 0 END AS ProductsInback
FROM dbo.user
WHERE userCode = 'XYZ'
推荐阅读
- r - 空格在 fread 中未被识别为 NA
- python - 整理 gcc 使用的 Cython 构建标志
- c# - 通过修改文件测试校验和
- javascript - jQuery - 5秒后重定向网页
- java - 用于生成有效 SOAP 标头的 OpenSAML 实现
- android - 我无法使用 Android Studio 预览某些布局
- sql - 如何通过将持续时间添加到开始日期 SQL 来更新结束日期
- mosquitto - 有多少用户可以接受 mosquitto 用户列表?
- robotframework - Robot Framework 中的无头测试
- python-3.x - 将 python 2 转换为 python 3('PROCESS_ALL_ACCESS' 未定义)