Вопрос подзапросов SQL - PullRequest
0 голосов
/ 14 мая 2009

Я хочу выбрать tblProperty.ID, только если этот запрос возвращает больше 0

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, на который он смотрит. Я не знаю, что такое «х».

Как я могу это сделать?

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 ]

3 голосов
/ 14 мая 2009
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

Должно работать.

2 голосов
/ 14 мая 2009

Запрос: выберите только те объекты недвижимости, в которых есть арендные квартиры, в которых проживают арендаторы.

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. Похоже, что в этом не было необходимости, поскольку, похоже, ссылка идет от арендатора-> арендная единица-> недвижимость.

1 голос
/ 14 мая 2009

Добавьте следующее в конец запроса. Это предполагает, что вы не хотите ничего возвращать, если счет равен 1 или 0.

HAVING COUNT(tblProperty.ID) > 1
0 голосов
/ 14 мая 2009

На самом деле, это работает:

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)
0 голосов
/ 14 мая 2009

как насчет изменения начала на SELECT tblProperty.ID и добавления в конце HAVING COUNT(tblProperty.ID) > 1? Хотя я признаю, что не понимаю ваших AS положений - они кажутся мне совершенно ненужными ...

0 голосов
/ 14 мая 2009

Предложение GROUP BY, возможно? ВЫБРАТЬ В ТЕМПЕРНУЮ таблицу и затем ВЫБРАТЬ из #tmp, если это проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...