SQL子查询问题

时间:2009-05-13 20:25:07

标签: sql-server tsql

我想仅在此查询返回大于0时选择tblProperty.ID

SELECT     
    COUNT(tblProperty.ID) AS count
FROM         
    tblTenant AS tblTenant 
    INNER JOIN tblRentalUnit
        ON tblTenant.UnitID = tblRentalUnit.ID 
    INNER JOIN tblProperty
        ON tblTenant.PropertyID = tblProperty.ID 
        AND tblRentalUnit.PropertyID = tblProperty.ID
WHERE tblProperty.ID = x

其中x等于它正在查看的父级的tblProperty.ID。 我不知道'x'是什么。

我该怎么做?

Database Structure:
tblTenant:
  ID
  PropertyID <--foreign key to tblProperty
  UnitID     <--foreign key to tblRentalUnit
  Other Data
tblProperty:
  ID
  Other Data
tblRentalUnit:
  ID
  PropertyID <--foreign key to tblProperty
  Other Data

查询说明:
该查询仅选择具有租户的租赁单元的属性。

6 个答案:

答案 0 :(得分:3)

SELECT     
   tblProperty.ID
FROM         
    tblTenant AS tblTenant 
    INNER JOIN tblRentalUnit AS tblRentalUnit 
        ON tblTenant.UnitID = tblRentalUnit.ID 
    INNER JOIN tblProperty AS tblProperty 
        ON tblTenant.PropertyID = tblProperty.ID 
        AND tblRentalUnit.PropertyID = tblProperty.ID
GROUP BY tblProperty.ID
HAVING COUNT(tblProperty.ID) > 1

应该工作。

答案 1 :(得分:2)

  

查询是:仅选择包含租户的租赁单元的属性。

SELECT
  p.ID
FROM
  tblProperty              AS p
  INNER JOIN tblRentalUnit AS u ON u.PropertyID = p.ID
  INNER JOIN tblTenant     AS t ON t.UnitID     = u.ID
GROUP BY
  p.ID

这应该这样做。显式的内部联接选择任何未引用的记录,这意味着它仅选择具有租户的租赁单元的那些属性。

我不确定为什么tblTenant链接到tblProperty。看起来好像没有必要,因为链接似乎来自租户 - >租赁单位 - >属性。

答案 2 :(得分:1)

将以下内容添加到查询的末尾。这假设您不希望在计数为1或0时返回任何内容。

HAVING COUNT(tblProperty.ID) > 1

答案 3 :(得分:0)

或许 GROUP BY子句?选择进入临时表&amp;然后从#tmp中选择,如果这更容易。

答案 4 :(得分:0)

如何将开始更改为SELECT tblProperty.ID并在结尾添加HAVING COUNT(tblProperty.ID) > 1?虽然我承认我不理解你的AS条款 - 但对我来说,它们似乎完全是多余的......每一个......

答案 5 :(得分:0)

实际上,这有效:

SELECT DISTINCT
     p.ID
FROM         tblProperty AS p LEFT OUTER JOIN
                      tblTenant AS t ON t.PropertyID = p.ID
WHERE     (t.UnitID IS NOT NULL)