Выберите строки, имеющие количество в связанной таблице - PullRequest
1 голос
/ 14 июля 2011

У меня есть подозрение, что это простая проблема, но мои навыки sql просто отсутствуют, и Google не помогает мне (пока).

У меня есть следующие таблицы (урезанные для простотычтение):

CREATE TABLE IF NOT EXISTS `PROPERTIES` (
    `ID` int(11) NOT NULL auto_increment,
    PRIMARY KEY  (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=111 ;

CREATE TABLE IF NOT EXISTS `PROPERTY_PHOTOS` (
  `ID` int(11) NOT NULL auto_increment,
  `PROPERTY_ID` int(11) NOT NULL,
  `PHOTO` varchar(128) NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=911 ;

Какую ссылку на PROPERTIES.ID = PROPERTY_PHOTOS.PROPERTY_ID

я хотел бы сделать примерно так:

SELECT P.ID FROM PROPERTIES P WHERE COUNT(SELECT PP.ID FROM PROPERTY_PHOTOS PP WHERE PP.PROPERTY_ID = P.ID) > 0

или

SELECT P.ID FROM PROPERTIES P HAVING COUNT(SELECT PP.ID FROM PROPERTY_PHOTOS PP WHERE PP.PROPERTY_ID = P.ID) > 0

Однако оба запроса синтаксически некорректны.

Кто-нибудь может посоветовать, как выбрать из записей PROPERTIES только записи, соответствующие записи которых содержатся в таблице PROPERTY_PHOTOS?

Ответы [ 2 ]

2 голосов
/ 14 июля 2011
    SELECT P.ID,COUNT(*)
      FROM PROPERTIES P
         , PROPERTY_PHOTOS PP
     WHERE PP.PROPERTY_ID = P.ID 
   GROUP BY P.ID
    HAVING COUNT(*) > 0

Или, на самом деле, обычное объединение должно работать, если вам не важен счет

SELECT DISTINCT P.ID
  FROM PROPERTIES P
     , PROPERTY_PHOTOS PP
 WHERE PP.PROPERTY_ID = P.ID 
1 голос
/ 14 июля 2011

Это должно сделать это

 SELECT PROPERTIES.ID, COUNT(*) FROM PROPERTIES, PROPERTY_PHOTOS WHERE PROPERTY_PHOTOS.PROPERTY_ID = PROPERTIES.ID GROUP BY PROPERTIES.ID HAVING COUNT(*) > 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...