부서 (회사가 속한)와 키워드로 회사를 검색하려는 DB (MySQL 5.5, Ubuntu 14.04)를 만듭니다. 이제 우리는 테이블이 있다고 가정 해 봅시다 -MySQL JOIN + 결과가 없습니다.
company (c_id,c_name)
-------------------------------
1 'A-Z hair'
2 'My Coffee'
3 'Boom Disco'
4 'Go Cinema'
keywords (c_fk , keyword)
-----------------
1 'haircut'
1 'pruning'
1 'coloring'
2 'coffee'
2 'tea'
2 'free wifi'
division(d_id , d_name)
---------------
1 'shop'
2 'service'
3 'manufacturing'
4 'engineering'
5 'food'
6 'entertainment'
comp_div (c_fk , d_fk)
-----------------------
1 2
2 5
2 2
4 6
(.._ FK 열이 외래 키 연결은)
내가
(회사가 특정 부서 또는 부문 아무튼에 속하는 회사를 반환 여러 가지 선택 기준으로 선택이 필요 '문제') 및
(일부 회사의 키워드는 '무언가'또는 키워드는 중요하지 않음)
여기에 sqlfiddle link이 있습니다. 불행하게도 그래서 내가 예상대로 작동하고 모든 기업과 모든 행을 제공
SELECT c_id,c_name,d_fk,keyword FROM company
LEFT JOIN comp_div ON c_id=comp_div.c_fk
LEFT JOIN keywords ON c_id=keywords.c_fk
가입 다음 만들어 내 검색 쿼리를 컴파일 시작 5.6
에서 테스트 5.5 모드가 작동하지 않는 몇 가지 버그와 MySQL의이 * 부서 * 키워드
그런 다음 추가로 결과를 구체화하고 싶습니다. 예를 들어 WHERE keyword = 'something'. 물론 NULL 비교에 문제가있어서 WHERE이 실패하고 쿼리가 결과를 제공하지 않습니다. 나는 키워드 및/또는 구분 매개 변수가 존재하지만 또한 존재하지 않는 경우에 대한 검색 요청을 확장하려고합니다. 그래서 내 생각은 이런 것입니다. -
SELECT c_id,c_name,d_fk,keyword FROM company
LEFT JOIN comp_div ON c_id=comp_div.c_fk
LEFT JOIN keywords ON c_id=keywords.c_fk
WHERE (''=keyword OR keyword LIKE somethin%) AND
(comp_div.d_fk=<division_fk> OR comp_div.d_fk = 0)
나는 모든 방법을 필사적으로 시도합니다. ON으로 조건을 이동
1 .. 그것이 제공으로 이상한 방식으로 작동
SELECT c_id,c_name,d_fk,keyword FROM company
LEFT JOIN comp_div ON c_id=comp_div.c_fk
LEFT JOIN keywords ON (c_id=keywords.c_fk) AND (keyword='something')
없이 WHERE 파생 테이블에 널 키워드로 모든
2.applying 결과 WHERE + IFNULL/COALESCE
SELECT c_id,c_name,d_fk,keyword FROM(
SELECT c_id,c_name,d_fk,keyword FROM company
LEFT JOIN comp_div ON c_id=comp_div.c_fk
LEFT JOIN keywords ON c_id=keywords.c_fk) dt
WHERE COALESCE(dt.keyword,'')='something'
아마 어리석은 결과를 반환하지 않습니다.
작업을 수행하는 데 유용한 모범 사례를 알려주십시오. 감사.
일부 샘플 데이터를 ** ** sql fiddle ** 공유 할 수 있습니까?또한 예상 출력을 표 형식으로 언급하십시오. – 1000111
원본 게시물에 샘플 테이블과 sqlfiddle을 추가했습니다. – Anderquo