2011-08-31 4 views
1

연결된 테이블에 해당 레코드가있는 레코드 만 선택하는 방법을 mySQL에서 찾고 있습니다. 나는 터널 비전을 겪을 가능성이 크며, 그렇지 않으면 간단한 것을 놓치고있다. 연결된 레코드가있는 레코드 만 선택하십시오.

I이 현재 이상이 요구 사항 외에 작동 다음 쿼리 :이 연결된 스레드에서 답이 근무하는 동안 Select rows Having Count in linked table

이 여기에 광산의 이전 질문과 관련이

SELECT P.ID, P.NAME, P.SEO_NAME, CI.City, R.Region, C.Country 
FROM PROPERTIES P 
LEFT JOIN Cities CI ON P.CITY_ID = CI.CityId 
LEFT JOIN Regions R ON P.REGION_ID = R.RegionID 
LEFT JOIN Countries C ON P.COUNTRY_ID = C.CountryId 
WHERE APPROVED = '1' AND REGION_ID = '5400' 
ORDER BY RAND() LIMIT 1; 

지금은 위의 쿼리에서 추가 정보가 필요합니다. 링크 된 테이블의 레코드가있는 레코드 만 PROPERTY_PHOTOS PP (링크 : ON P.ID = PP.PROPERTY_ID)

미리 입력 해 주셔서 감사합니다.

+0

PROPERTY_PHOTOS 테이블을 연결하지 않았습니다. 쿼리를 업데이트하면 내 대답을 수정합니다. – MattBelanger

+0

내가 보지 못했던 코끼리를 지적 해 주신 모든 분들께 감사드립니다. ㅎ. – DaveL

답변

1

하나 더 JOIN 있지만 LEFT

SELECT ... 
FROM PROPERTIES P 
... 
INNER JOIN PROPERTY_PHOTOS PP ON P.ID = PP.PROPERTY_ID 

하거나

they are the same이기 때문에.

+0

이 부분의 중요한 점은 무엇입니까? 답변이 정확하지 않다는 의견을 먼저 입력 한 다음 똑같은 내용을 게시 하시겠습니까? –

+0

abatischev는 실제로 내가 시도한 첫 번째 답변이었고 즉시 작동했습니다. 과정의 그것은 간단합니다. 나는 이것을 완전히 다른 방식으로보고있었습니다. 고맙습니다. – DaveL

-1

참고 :이 쿼리는 실제로 사진 테이블을 포함하지 않습니다,하지만 난 당신이 PP로 합류 가정합니다

SELECT P.ID, P.NAME, P.SEO_NAME, CI.City, R.Region, C.Country 
FROM PROPERTIES P 
LEFT JOIN Cities CI ON P.CITY_ID = CI.CityId 
LEFT JOIN Regions R ON P.REGION_ID = R.RegionID 
LEFT JOIN Countries C ON P.COUNTRY_ID = C.CountryId 
WHERE APPROVED = '1' AND REGION_ID = '5400' AND PP.PROPERTY_ID IS NOT NULL 
ORDER BY RAND() LIMIT 1; 
4

LEFT JOIN 대신 INNER JOIN을 사용해보십시오. INNER JOIN에 대한 SQL 사양에있어서, 상기 LEFT JOIN를 들어

The INNER JOIN keyword return rows when there is at least one match in both tables. 

,이된다 :

The LEFT JOIN keyword returns all rows from the left table (table_name1), 
even if there are no matches in the right table (table_name2). 
+0

@abatishchev : 그게 바로 INNER JOIN이하는 일입니다. 누락 된 링크 제외 –

+0

죄송합니다, 오보. – abatishchev

3
SELECT P.ID, P.NAME, P.SEO_NAME, CI.City, R.Region, C.Country 
FROM PROPERTIES P 
LEFT JOIN Cities CI ON P.CITY_ID = CI.CityId 
LEFT JOIN Regions R ON P.REGION_ID = R.RegionID 
LEFT JOIN Countries C ON P.COUNTRY_ID = C.CountryId 
**INNER JOIN PROPERTY_PHOTOS PP ON P.ID = PP.PROPERTY_ID** 
WHERE APPROVED = '1' AND REGION_ID = '5400' 
ORDER BY RAND() LIMIT 1; 
4

INNER JOIN 당신을 위해이 작업을 수행해야합니다

INNER JOIN PROPERTY_PHOTOS PP ON P.ID = PP.PROPERTY_ID 

이 의지 일치가있는 경우에만 레코드를 반환합니다. 두 테이블.

3

"INNER JOIN"이 필요합니다.

관련 문제