首页 > 解决方案 > 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 ?

标签: sqltsql

解决方案


你是对的,为了查找数据是否存在于另一个表中,我们使用EXISTSor 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' 

推荐阅读