2011-07-14 2 views
1

私は簡単な問題だと思っていますが、私のSQLスキルはそこにはなく、Googleは(まだ)助けていません。選択した行数がリンクテーブルにある

私は、次の表(読みやすくするためにストリップダウン)を持っている:

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

:私がやりたい何PROPERTIES.ID = PROPERTY_PHOTOS.PROPERTY_ID

にリンク

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 ; 

のようなものですまたは

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

しかし、両方のクエリは構文的に正しくありません。

誰でもPROPERTY_PHOTOSテーブルの対応するレコードを持つPROPERTIESレコードのみを選択する方法についてアドバイスできますか?

答えて

2
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 
+0

を行う必要があります動作するはずですが、それに私を殴り、あなたの答えは優れています –

+0

@ jamesj - 賛辞をありがとう:) – dcp

+0

ああ、私は本当にこれを考えすぎた。何か感覚を私に叩いてくれてありがとう。 – DaveL

1

を気にしない場合、これはそれに

SELECT PROPERTIES.ID, COUNT(*) FROM PROPERTIES, PROPERTY_PHOTOS WHERE PROPERTY_PHOTOS.PROPERTY_ID = PROPERTIES.ID GROUP BY PROPERTIES.ID HAVING COUNT(*) > 0 
+0

ありがとう、ありがとう! – DaveL

関連する問題