2014-04-30 3 views
0

임 내 수업나는 5 개 테이블이

에 대한 MTG 카드 데이터베이스를 만드는 MTG의 데이터베이스를 통해 검색 할 수있는 SQL 쿼리를 만들기 , setId, CMC. cardId가 기본 키입니다.

colorcolorIdcolor입니다. color는 문자열이며 colorId는 기본 키입니다.
typetypeIdtype을 포함합니다. 유형 유형 ID는 기본 키
card_colors이 항목 cardId의 쌍 colorId
card_typescardIdtypeId의 항목 쌍을 유지하는 연결의 테이블을 보유하고 연결 테이블입니다, 문자열입니다.

카드를 이름으로 검색하고 각각의 유형과 색상을 한 줄에 표시하려면 어떻게해야합니까? 현재 내 쿼리는 각 카드마다 여러 색상의 항목을 표시합니다. ,
http://www.filehosting.org/file/details/446996/mtg_database.sqlite

+0

난 혼자 SQL을 사용하여 그렇게 할 수 있다고 생각하지 않습니다. 문제는 색상 및 유형을 기반으로 출력에 알 수없는 여러 열을 추가해야한다는 것입니다. 이러한 쿼리 각각에 대해 커서를 개별적으로 만들고 사용자가 선호하는 프로그래밍 언어로 모든 데이터를 조합하는 것이 좋습니다. – Verma

답변

0
SELECT crd.NAME AS CardName, 
     ct.NAME AS CardType, 
     cl.color AS CardColor 
FROM card crd 
INNER JOIN card_types ct ON(crd.cardId=ct.cardId) 
INNER JOIN card_color cl ON(crd.cardId=cl.cardId) 
WHERE crd.NAME='%ENTER NAME HERE%'; 
0

내가이 이전 스레드 알고 :

SELECT card.name, type.name, color.color 
FROM card, card_types, card_color 
JOIN type, color 
ON (card.cardId = card_types.cardId) AND (card.cardId = card_color.cardId) 
WHERE card.name LIKE "ENTER NAME HERE"; 

당신은 여기 내 .sqlite 파일을 찾을 수 있습니다 그것을 확인하려면 다음

여기에 내 현재 쿼리 그러나 당신이 찾고있는 것은 PIVOT입니다. 아래와 같이 카드의 색상을 피벗시킬 수 있습니다. 유형이나 여러 속성을 가질 가능성이있는 속성을 사용하여 동일한 작업을 수행 할 수 있습니다. 이 코드는 한정된 알려진 수의 속성을 피벗하는 것을 보여 주지만 모든 고유 값 목록으로 변수를 동적으로 채우고 동적 T-SQL 문자열을 작성할 수 있습니다. 또한이 모든 것을 사용하여 조회 테이블에 가입하여 자세한 카드 정보를 얻을 수 있습니다.

select cardid, [1] , [2] , [3] , [4] , [5] 
from 
(
    select cardid, colorid, 
     row_number() over (partition by cardid order by cardid) as rownum 
    from card_colors) a 
pivot 
(
    max(colorid) for rownum in ([1] , [2] , [3] , [4] , [5]) 
)as pvt;