두 개의 테이블이 있습니다. 하나는 아이템이고 하나는 이베이 목록입니다. 주어진 항목에 대해 여러 개의 이베이 목록이있을 수 있습니다.뷰에서 mysql join에서 중복을 방지합니다.
나는 이베이 테이블을 포함하여 여러 테이블에서 많은 가격 정보를 집계 (왼쪽 조인)하는 뷰를 가지고 있습니다.
e.custom_label
은 i.id
으로 시작하지만 정확히 일치하는 것은 아닙니다.
SELECT i.id, i.price AS master_price, e.price AS ebay_price
FROM items i
LEFT JOIN ebay e ON ((e.custom_label LIKE CONVERT(concat(i.id,'%') using latin1)))
이것은 크게 단순화되었지만 문제를 설명해야합니다. 때문에 ON 문을 일치합니다 여러 이베이 리스팅 데, 예상대로
item master_price ebay_price
1234 29.95 29.95
1235 36.95 29.95
1235 36.95 29.95
은 일반적으로 우리가 필터링 조인에 ebay
tabel 대신에 하위 쿼리를 사용하는 것처럼, 당신이 뭔가를 얻을 것이다 사본이지만, 이것이보기이기 때문에 우리는 할 수 없습니다. 이렇게하면 조인 된 테이블에서 그룹을 수행하지 못하게됩니다. 뷰에서 기본 테이블을 편집 가능하게 유지하는 방식으로 중복을 필터링하는 다른 방법이 있습니까?
이 견해로는 모든 eBay 가격이 동일한 지 확인하는 것보다 가격을 책정하는 것이 더 중요합니다 (제품이 eBay에 등재되어 있음을 알고 있음). UI는 항목 당 하나의 행만있을 것이라는 점에 의존합니다.
왜 뷰에서 하위 쿼리를 사용할 수 없습니까? 너 해봤 어? 길게 짧게, 당신은'GROUP BY item'을 시도 했습니까? –
예. (예 : http://stackoverflow.com/questions/17983379/mysql-error-1349-what-i-am-missing) – Mike
MySQL에서보기를 너무 많이 만들지 않기 전에, 큰 테이블의 성능 영향을 이해하십시오. 외부 쿼리의 술어는 뷰 쿼리로 푸시 다운되지 않으며 뷰 쿼리의 결과는 항상 인덱스가없는 파생 테이블로 나타납니다. (파생 테이블에 대한 인덱스가없는 부분은 MySQL의 최신 릴리스에서 부분적으로 다룹니다.) ** Danger, Will Robinson. Danger! ** – spencer7593