2013-07-30 13 views
0

두 테이블을 조인하고 오른쪽 테이블에서 여러 레코드를 가져 와서 한 줄로 결합하려고합니다. 나는 그것을 위해 SQL Fiddle을 만들었다. 나는 내 접근 방식이 옳다는 것이 긍정적이지는 않지만 내가 가졌던 가장 가까운 접근 방식이다. - A - 1 카레 - C - 그가 찾고에 대한 0SQL 쿼리 조합

감사가 원인 1. Kaep 아웃해야 포지 : 이상적으로 쿼리에 대한 두 줄을 표시해야합니다. 사람과 등록

2 테이블 : 여기

SQL Fiddle 설명 관련 세부 사항입니다. 등록시 등록시 각 개인의 선택 항목 (예 : 등록 유형 및 예/아니오 응답)에 대한 행이 있습니다. regtype 및 yesno 항목 모두 해당 레코드가 저장 될 때 알려주도록 토글이 있습니다. 나는 그들의 등록 유형과 결합 된 개인의 세부 사항과 YesNoEntry에 대해 Yes를 선택한 경우를 알고 싶습니다. 여기

테이블 구조와 일부 더미 삽입입니다 : 당신의 SQLFiddle 예를 확인

CREATE TABLE RegPerson (
    RegPersonID INT, 
    FirstName VARCHAR(32), 
    LastName VARCHAR(32), 
    Company VARCHAR(32), 
    Dummy1 INT 
); 

CREATE TABLE Reg (
    RegID INT, 
    RegPersonID INT, 
    RegItemID INT, 
    RefNumber INT, 
    RegistrationToggle BINARY, 
    RegistrationType VARCHAR(32), 
    YesNoToggle BINARY, 
    YesNoEntry BINARY, 
    Dummy2 VARCHAR(32), 
    Dummy3 BINARY 
); 

INSERT INTO RegPerson 
      SELECT 1, 'Buster', 'Posey', 'Giants', 456 
UNION ALL SELECT 2, 'Colin', 'Kaepernick', '49ers', 765 
UNION ALL SELECT 3, 'Stephen', 'Curry', 'Warriors', 321; 

INSERT INTO Reg 
      SELECT 1, 1, 1, 98765, 0, '', 0, 0, 'asdf', 1 
UNION ALL SELECT 2, 1, 2, 98765, 1, 'A', 0, 0, 'qwer', 0 
UNION ALL SELECT 3, 1, 3, 98765, 0, '', 1, 1, 'rtyu', 1 
UNION ALL SELECT 4, 2, 1, 12345, 0, '', 0, 0, 'jkl;', 0 
UNION ALL SELECT 5, 2, 2, 12345, 1, 'B', 0, 0, 'cvnb', 1 
UNION ALL SELECT 6, 2, 3, 12345, 0, '', 1, 0, 'zxcv', 0 
UNION ALL SELECT 7, 3, 1, 56789, 0, '', 0, 0, 'poiu', 0 
UNION ALL SELECT 8, 3, 2, 56789, 1, 'C', 0, 0, 'cvnb', 1 
UNION ALL SELECT 9, 3, 3, 56789, 0, '', 1, 1, 'zxcv', 0; 
+6

질문에 관련된 모든 정보를 추가하십시오. SQLFIddle을 사용할 수 없다면 당신의 질문은 쓸모가 없습니다. –

+0

알겠습니다. 고마워요. 세부 정보로 업데이트되었습니다. – user2634997

답변

0

이 쿼리는 당신에게 당신이 원하는 행을 제공합니다

select a.refnumber, 
     c.firstname, 
     c.lastname, 
     c.company, 
     a.registrationtype, 
     b.yesnoentry 
from reg a, reg b, regperson c 
    where a.refnumber=b.refnumber 
    and a.regpersonid=c.regpersonid 
    and a.registrationtype !='' 
    and b.yesnotoggle=1 
    and b.yesnoentry=1; 

당신이 등록 테이블에있는 데이터의 여러 부분을 저장하고 있기 때문에, 전체 기록을 보려면 가입 자체에있다. 한 행만 사용하도록 데이터를 재구성하거나 예 또는 아니오 값을 저장하기 위해 별도의 테이블을 작성할 수 있습니다. 데이터 세트가 거대하지 않은 한, 이것은 정상적으로 작동합니다.

+0

완벽한, 감사합니다! 행 수가 동적이기 때문에이 행을 모두 저장할 수 없습니다. 관리자는 다른 테이블에 저장된 양식을 작성하며 이는 양식에 대한 항목입니다. 이것은 내가 찾고 있었던 바로 그 것이다. 너가 자기 조인 할 수 있었다는 것을 몰랐다, 그러나 이해된다. – user2634997

0

, 나는 당신이 UNION을 필요로하지 않는다는 것을 생각하지만, JOIN :

SELECT 
    Reg.RefNumber, 
    RegPerson.FirstName, 
    RegPerson.LastName, 
    RegPerson.Company, 
    Reg.RegistrationType, 
    Reg.YesNoEntry 
FROM 
    Reg 
    INNER JOIN RegPerson ON RegPerson.RegPersonID = Reg.RegPersonID 
WHERE 
    Reg.RegItemID = 3 
    Reg.YesNoToggle = 1 
    AND Reg.YesNoEntry = 1 

이 쿼리가 얻을 것이다 에 기록이있는 사람의 데이터는 모두 테이블입니다. 내가 이해할 때 reg에있는 사람은 인 경우에만 regPerson에 이미 기록이있을 수 있습니다. 이 도움이

SELECT DISTINCT 
    RegPerson.FirstName, 
    RegPerson.LastName, 
    RegPerson.Company, 
FROM 
    Reg 
    INNER JOIN RegPerson ON RegPerson.RegPersonID = Reg.RegPersonID 
WHERE 
    Reg.RegItemID = 3 
    Reg.YesNoToggle = 1 
    AND Reg.YesNoEntry = 1 

희망 : 당신이 목록의 중복을 제거 할 만 이름을 표시하는 경우

, 당신이 뭔가를 할 수 있습니다.