T-SQL:检查表中是否存在数据

时间:2019-03-06 18:39:45

标签: sql tsql

我正在使用一个视图,该视图检查另一个表中是否存在数据,以及是否显示连接到该表的行数。现在,我想知道是否可能有一种更快的方法,因为我只对是否有数据感兴趣,而不必关心有多少数据行。我猜想它不需要计数时会更快。

这就是我现在使用的:

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替换为...吗?

2 个答案:

答案 0 :(得分:2)

您是对的,为了查询数据是否存在于另一个表中,我们使用EXISTSIN,因为那时我们不必遍历所有匹配的行,但是可以在找到第一个。

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' 

答案 1 :(得分:0)

如果您将左联接更改为内部联接,则只会得到具有产品的用户列表。其他用户将不会出现在列表中。

SELECT
dbo.user.id,
dbo.user.userCode

FROM dbo.user

JOIN dbo.Product
  ON dbo.Product.userCode= TotalProducts.userCode