2012-04-20 2 views
0

지금까지는 조인 된 테이블에서 1 행만 찾으려면 필요했습니다. 하지만 지금은 여러 행을 잡아합니다 ..SQL Advice - 테이블에서 innerJoin으로 여러 행 선택

을 내 SQL이 같은 작동 서 그래서 같이 혼자 회사 정보 (이름, ID, 전화를 찾아 낼 것이 특정 프로젝트에 대해 각 회사의

행을 선택합니다. . blah). 그런 다음 각 회사에 대해 제출 된 양식 데이터가 포함 된 테이블에 가입하십시오 (여러 양식 - 그래서 여러 레코드)

지금까지는 하나의 formid를 조인에서 지정했지만 지금은 여러 개의 formid를 지정해야합니다. 내가 WHERE form_id = 1 OR form_id = 2 OR form_id = 3 ...를 사용하는 경우

나는 기업 당 발견되는 첫 번째 형태의 경기 결과를 .. 얻을

는 양식 1을 찾고 각 회사에 대해 여러 레코드를 반환 그래서 쿼리를 섞어 경우 다른 양식 데이터 - 그 의미에서 작동합니다.이보기에서이 배열을 통해 루핑 및 레코드 당 테이블 행 (이전에 각 행은 새로운 회사) 만들기하지만 후자를 사용하면 여러 레코드가 발생할 것이다 같은 회사에 표시 할 수 있습니다.

나는 이것을 할 수있다? 후자의 방법으로 group by을 시도했지만이 결과는 다시 한 번 기록됩니다.

SELECT DISTINCT p.project_company_has_user_id, p.project_company_has_user_project_id, p.project_company_has_user_user_id, c.company_id, c.company_hall_no, c.company_company_name, c.company_type, c.company_country, c.company_stand_number, c.company_image_file_1, p2.project_id, p2.project_name, u.user_id, u.user_username, o.orders_id, o2.order_detail_id, o2.order_detail_product_id, f2.form_question_has_answer_id, f2.form_question_has_answer_request, f2.form_question_has_answer_form_id, f2.form_question_has_answer_user_id 
    FROM project_company_has_user p 
    INNER JOIN company c ON p.project_company_has_user_company_id = c.company_id 
    INNER JOIN project p2 ON p.project_company_has_user_project_id = p2.project_id 
    INNER JOIN user u ON p.project_company_has_user_user_id = u.user_id 
    INNER JOIN form f ON p.project_company_has_user_project_id = f.form_project_id 
    LEFT JOIN orders o ON p.project_company_has_user_user_id = o.orders_user_id 
    LEFT JOIN order_detail o2 ON ((o2.order_detail_orders_id = o.orders_id AND (o2.order_detail_product_id = 65 OR o2.order_detail_product_id = 68 OR o2.order_detail_product_id = 64))) 
    LEFT JOIN form_question_has_answer f2 ON ((f2.form_question_has_answer_form_id = 297 AND f2.form_question_has_answer_user_id = p.project_company_has_user_user_id)) 
    WHERE (f.form_template_name = "custom" AND p.project_company_has_user_garbage_collection = 0 AND p.project_company_has_user_project_id = 48) AND (LCASE(c.company_country) LIKE "%uk%" OR LCASE(c.company_country) LIKE "%uk%") ORDER BY company_company_name asc 
+0

현재 SQL 쿼리를 게시 할 수 있습니까? – weenoid

답변

1

당신은 O2와 같은 order_detail에서 다른 필드가 필요합니다. 이 필드는 레코드 위치 지정을위한 row_index (위치) 등입니다.

LEFT JOIN order_detail o2 ON (o2.row_index=1 AND (o2.order_detail_orders_id = o.orders_id AND (o2.order_detail_product_id = 65 OR o2.order_detail_product_id = 68 OR o2.order_detail_product_id = 64))) 
0

개인적으로 모든 일치 항목을 나열해야하는 요소의 테이블에 대해 외부 조인을 사용합니다. 데이터를 정리해야 할 경우 논리를 조인 조건으로 작성할 수 있습니다 (2 단계). 처리중인 데이터의 양과 나중에 동일한 프로 시저에서 재사용해야하는지 여부에 따라, 임시 데이터 테이블에 임시 데이터 테이블을 게시하고이를 나중에 로직의 소스 (기본)로 사용할 수 있습니다.

희망이 있습니다. 코드가 필요하다면 알려주세요.하지만 꽤 간단합니다.

감사

관련 문제