두 개의 SQL 테이블 'products'및 'tags'가 있습니다. 이들은 세 번째 테이블 'product_tags'를 사용하여 n : m 관계를 유지합니다.mysql n : m 관계 : 여러 특정 관계가있는 행 찾기
쿼리를 사용하여 특정 태그가 여러 개있는 모든 제품을 찾고 싶습니다. 예를 들어 태그 1, 23 및 54와 관련이있는 모든 제품을 찾으십시오.
하나의 쿼리로이 작업을 수행 할 수있는 방법이 있습니까?
두 개의 SQL 테이블 'products'및 'tags'가 있습니다. 이들은 세 번째 테이블 'product_tags'를 사용하여 n : m 관계를 유지합니다.mysql n : m 관계 : 여러 특정 관계가있는 행 찾기
쿼리를 사용하여 특정 태그가 여러 개있는 모든 제품을 찾고 싶습니다. 예를 들어 태그 1, 23 및 54와 관련이있는 모든 제품을 찾으십시오.
하나의 쿼리로이 작업을 수행 할 수있는 방법이 있습니까?
이 솔루션을 사용할 수 있습니다. 이 ALL 키워드 1, 23, 54를 포함하는 모든 제품을 가져옵니다 3
이 WHERE IN
목록에있는 항목의 수입니다, 그래서 당신이 따라 태그의 양에 따라 조정할 수 있습니다
SELECT a.*
FROM products a
INNER JOIN product_tags b ON a.product_id = b.product_id
WHERE b.tag_id IN (1,23,54)
GROUP BY a.product_id
HAVING COUNT(1) = 3
당신 확인하고 싶다.
내가 열 이름을 가정하고
PRODUCTS p
JOIN PRODUCT_TAGS pt ON p.ID = pt.PRODUCT_ID
JOIN TAGS t ON pt.TAG_ID = t.ID AND
t.ID IN (1, 23, 54)
로부터이
SELECT *를 사용해보십시오. 컬럼 이름은 직설적이며 컬럼 이름을 쉽게 사용할 수 있다고 생각합니다. 더 많은 설명이 필요하면 알려주세요.
COUNT (1) = 3 – Narendra
HAVING 절을 'HAVING COUNT (b.tag_id) = 3'으로 바꾸고'GROUP BY a.id'를 추가하면 완벽하게 작동합니다. – Majiy
COUNT 뒤에있는 이유는 대괄호 안의 요소 중 몇 개가 일치하는지 (...)는 신경 쓰지 않기 때문입니다. COUNT가 없으면 결과는 "정확히 모든 태그가있는 모든 제품"대신 "모든 태그가있는 모든 제품"이됩니다. – Majiy