2013-10-19 2 views
0

약간 복잡한 쿼리를 작성해야합니다.여러 테이블에서 MySQL 쿼리를 사용 중입니다.

이 내 데이터베이스 구조입니다 :

enter image description here

사용자 추가/필터를 입력하고 필터에 따라, 잡지와 신문의 표시 특파원 모음이있을 것이다 것입니다.

가능한 필터는 다음과 같습니다

  • 잡지/신문 이름
  • FROMDATE
  • 결과는 잡지 나 신문 또는 둘 모두
  • 에서만 경우 TODATE
  • 선택은 수집 된 경우 분석 된 또는 아니요

글쎄, 사용자가 이름, 두 날짜, 잡지 및 신문 모두를 입력하고 분석 된 컬렉션 만 입력하면 쿼리는 어떻게 생겼습니까? 나는 collectionDate, newspaper/magazine 이름을 from과 to 날짜로 표시하려고합니다. 나는 질의를 알아 내려고 노력했지만 약간 어려움을 겪고있다.

제안 사항이 있습니까? 희망은 다 명확하다 :)

고마워!

+1

시도한 코드가 있습니까? – kmas

+0

그림에서 ID가 대상 테이블과 다른 테이블간에 어떻게 상관되는지는 분명하지 않습니다. 나는 그것을 가져 가라. target.type은 'collection', 'magazine'또는 'newspaper'가 될 것이고, 그런 다음 ssnID는 해당 테이블의 ID인가? –

+0

@Joe T, 더 명확 해 지도록 ID를 강조 표시하려고했습니다. 잡지와 신문은 대상의 하위 유형입니다 (미안하지만, MySQL Workbench에서 이것을 어떻게 표현할 지 확신 할 수 없습니다). 따라서 targetID는 신문사 ID 또는 잡지 ID (PKs) 중 하나입니다. ssnID는 newspaperID 또는 magazineID와 일치하지만이 쿼리에는 사용되지 않습니다. Collections는 Target의 하위 유형이 아니지만 Collection은 특정 컬렉션과 관련된 대상을 식별하기 위해 targetID를 외래 키로 사용합니다. –

답변

1
SELECT m.name as mag_name, 
      n.name as news_paper_name, 
      c.fromDate, 
      c.toDate 
    FROM Collections AS C 

     INNER JOIN Target AS T ON 
     C.TargetID = T.TargetID 

     INNER JOIN Magazine AS M ON 
     T.TargetID = M.id 

     INNER JOIN Newspaper AS N ON 
     T.TargerID = N.id 

     INNER JOIN Analysis AS A ON 
     C.CollectionID = A.CollectionID 

이것은 조인 관점에서 작동해야합니다. 나는 어떤 것이 분석 될 때 분석 아래에 기록이 있고 그것이 anaylzed되었을 때 하나가 아니라고 가정하고 있습니다. where 절과 필터링 할 정보를 추가하기 만하면됩니다.

+0

답변을 주셔서 감사합니다. 정말 저를 기억하고 다른 사람들을 분명히했습니다. –

+0

문제는 하나뿐입니다. m.name과 n.name을 둘 다 넣으면 Empty 세트가 생깁니다. 그러나 내가 각각 별도로 할 때 그것은 효과가있다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까? –

+0

UNION을 사용하여 해결했습니다. 모두에게 감사합니다 :) –

관련 문제