1
이것이 쉽지만 정확한 결과를 반환 할 수없는 이유를 알 수는 없습니다.MySQL에서 하나의 맵 테이블로 두 개의 쿼리의 교차 선택하기
이SELECT DISTINCT ref_product.familyid,ref_tag.tagid
FROM (ref_tag,ref_product)
JOIN ref_tagmap AS mt2 ON mt2.containerid=ref_product.id
AND mt2.containertype='PROD'
AND mt2.tagid=ref_tag.tagid
AND ref_tag.tagname='red'
올바르게 제품 familyids을 모두 반환
예쁜 표준 설정, 나는 ref_product 테이블, ref_tagmap 테이블과 ref_tag 테이블 ...
CREATE TABLE `ref_product` (
`id` DOUBLE ,
`name` VARCHAR (765),
`familyid` DOUBLE);
INSERT INTO `ref_product` (`id`, `name`, `familyid`) VALUES('264','Old Red Fixture 1','4');
INSERT INTO `ref_product` (`id`, `name`, `familyid`) VALUES('30206','Modern Red Fixture 2','405');
CREATE TABLE `ref_tag` (
`TagID` DOUBLE ,
`TagName` VARCHAR (150));
INSERT INTO `ref_tag` (`TagID`, `TagName`) VALUES('103','Modern Contemporary');
INSERT INTO `ref_tag` (`TagID`, `TagName`) VALUES('131','Red');
CREATE TABLE `ref_tagmap` (
`MapID` DOUBLE ,
`tagid` DOUBLE ,
`containertype` VARCHAR (45),
`containerid` DOUBLE);
INSERT INTO `ref_tagmap` (`MapID`, `tagid`, `containertype`, `containerid`) VALUES('17035','131','PROD','264');
INSERT INTO `ref_tagmap` (`MapID`, `tagid`, `containertype`, `containerid`) VALUES('17747','131','PROD','30206');
INSERT INTO `ref_tagmap` (`MapID`, `tagid`, `containertype`, `containerid`) VALUES('31959','103','PROD','30206');
사용하여이 테이블을 쿼리가 그 (것)들에지도로 만들어진 "빨간"꼬리표가있는. 마찬가지로 :
SELECT DISTINCT ref_product.familyid,ref_tag.tagid
FROM (ref_tag,ref_product)
JOIN ref_tagmap AS mt1 ON mt1.containerid=ref_product.id
AND mt1.containertype='PROD'
AND mt1.tagid=ref_tag.tagid
AND LCASE(ref_tag.tagname)='modern contemporary'
는 정확하게 매핑 태그 '현대 현대'를 가지고있는 제품 familyids를 반환합니다. 질문 : 태그가 모두 매핑되어있는 제품 가족 목록 만 반환하려면 어떻게해야합니까?
내가이 노력하고있어,이 비어 반환
SELECT DISTINCT ref_product.familyid,ref_tag.tagid
FROM (ref_tag,ref_product)
JOIN ref_tagmap AS mt2 ON mt2.containerid=ref_product.id
AND mt2.containertype='PROD'
AND mt2.tagid=ref_tag.tagid
AND ref_tag.tagname='red'
JOIN ref_tagmap AS mt1 ON mt1.containerid=ref_product.id
AND mt1.containertype='PROD'
AND mt1.tagid=ref_tag.tagid
AND LCASE(ref_tag.tagname)='modern contemporary'
나는 여기에 근본적인 뭔가를 누락 가정이 ... 조밀 한 느낌. 도와주세요.
감사합니다.
버니, 감사합니다 ...하지만 난이 도움이 될 것입니다 확실하지 않다. 나는이 작은 절을 구조화하는 방법을 분리하려고 노력하고있다. ... 12 개 정도의 많은 조건을 가진 훨씬 더 큰 쿼리의 일부이다. (그리고 여러 개의 조인 된 테이블과 나는 이미 다른 것에 그룹화하고있다.) 그래서 나는 두 태그가 매핑 된 결과 만 엄격하게 반환하도록 제한하는 방법이 있는지 이해하려고합니다. 이 고양이를 다듬는 다른 방법은 없나요? – OldSchool
tag_id 또는 tag_name을 반환 할 필요가 없다고 덧붙이겠다. 모든 전달 된 태그에 의해 태그가 지정된 product.familyid 만 반환한다. – OldSchool
당신은 대단히 환영합니다. 이 쿼리는 외부 쿼리에서 하위 쿼리로 사용할 수 있습니다. 그것에 결합하거나 (일부는이 파생 테이블이라고 함) 상관 관계가있는 하위 쿼리 (외부 쿼리의 WHERE 절에서)로 사용합니다. – bernie