2017-02-15 12 views
0

내가 두 테이블사용하는 방법 MySQL은 WHERE에 두 개의 별도의 테이블

books_tbl이에 대한 :

blocks side-bar top-bar 
23,45 3,15  11,56 

pages_tbl :

id title 
1 ff 
3 
11 
15 

를 내가의 행을 선택합니다 pages_tbl 여기에서 pages id는 books_table에 블록, 사이드 바 또는 턱 바 열 중 하나를 포함합니다. .

처리 방법은 무엇입니까?

+1

테이블 구조를 수정하십시오. ** 단일 셀에 여러 값을 저장하지 마십시오 **. 정규화를 참조하십시오. – GurV

+0

@ GurV : 이것은 내 시스템이 아닙니다. 나는 클라이언트에 따라 약간의 개조를하고있다. 그래서 힘든 변화가 일어나고 있습니다. 그것은 WHERE IN 절을 사용하여 수행 할 수 있습니까? pls 조언 –

답변

1

쉼표로 구분 된 값을 단일 필드에 저장하는 것은 좋지 않습니다. 데이터 구조를 실제로 변경할 수없는 경우 다음과 같은 쿼리를 사용할 수 있습니다.

select p.id, p.title 
from 
    pages_tbl p inner join books_tbl b 
    on (
    find_in_set(p.id, b.blocks) 
    or find_in_set(p.id, b.side-bar) 
    or find_in_set(p.id, b.top-bar) 
) 
-- add where condition? 
group by p.id, p.title 
1

테이블 구조를 수정하는 것이 좋습니다. 단일 셀에 여러 값을 저장하지 마십시오. 정규화를 참조하십시오.

이 경우와 마찬가지로 find_in_set 기능을 사용해보십시오. 어떤 경우 서버가 인덱스를 사용할 수 없기 때문에 그이 느려질 수 있지만

select 
from pages_tbl p 
where exists (
    select 1 
    from books_tbl b 
    where find_in_set(
     p.id, 
     concat(b.blocks, ',', b.side_bar, ',', b.top_bar) 
     ) > 0 
); 

는 것을 기억하십시오.