세 개의 열 (owner_id, property_id, ownership_perc)과 다 대다 관계가 있으며이 테이블에 적용됩니다 (많은 소유자가 많은 속성을 가짐).
따라서 요청 된 결과에 대한 추가 정보를 얻기 위해 속성 (property_id)이 많은 owner_id를 모두 찾아서 다른 세 테이블 (표 1,3,4)과 연결하고 싶습니다. 내가 사용하는 모든 테이블은
Table 1: owner (id_owner,name)
Table 2: owner_property (owner_id,property_id,ownership_perc)
Table 3: property(id_property,building_id)
Table 4: building(id_building,address,region)
따라서 이렇게 시도하면 쿼리가 실행되지만 빈 값을 반환합니다.
SELECT address,region,name
FROM owner_property
JOIN property ON owner_property.property_id = property.id_property
JOIN owner ON owner.id_owner = owner_property.owner_id
JOIN building ON property.building_id=building.id_building
GROUP BY owner_id,address,region,name
HAVING count(owner_id) > 1
ORDER BY owner_id;
아래 코드를 시도 할 때만 속성이 많은 owner_id (아래 이미지 참조)를 반환하지만 다른 세 테이블과 조인하지 않습니다.
SELECT a.*
FROM owner_property a
JOIN (SELECT owner_id, COUNT(owner_id)
FROM owner_property
GROUP BY owner_id
HAVING COUNT(owner_id)>1) b
ON a.owner_id = b.owner_id
ORDER BY a.owner_id,property_id ASC;
그래서, 내가 테이블에 참여할 때 내가 뭘 잘못하고 있는지에 대한 제안이 있습니까? 감사합니다!
이 쿼리 :
SELECT owner_id
FROM owner_property
GROUP BY owner_id
HAVING COUNT(property_id) > 1
owner_id
1 property_id
초 이상의 모든를 반환합니다 .
a의 조합에 중복의 경우가있는 경우 owner_id
및 property_id
다음 대신 COUNT(property_id)
사용 COUNT(DISTINCT property_id)
에있는 HAVING
절.
따라서 다른 테이블에 조인하십시오.
SELECT b.address, b.region, o.name
FROM (
SELECT owner_id
FROM owner_property
GROUP BY owner_id
HAVING COUNT(property_id) > 1
) t
INNER JOIN owner_property op ON op.owner_id = t.owner_id
INNER JOIN property p ON op.property_id = p.id_property
INNER JOIN owner o ON o.id_owner = op.owner_id
INNER JOIN building b ON p.building_id = b.id_building
ORDER BY op.owner_id, op.property_id ASC;
항상 테이블 이름 / 별칭으로 열 이름을 한정하십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다