2014-12-09 3 views
1

두 개의 테이블은 tbl_product1 및 tbl_product2입니다.데이터 결합 및 두 테이블 간의 특정 열 결합

tbl_product1 :

model_name 
lot_num 
status_prod1 
datecreated 
date_received 

tbl_product2 : 나는이 두 테이블 사이에 MODEL_NAME을 결합하여 하나 개의 컬럼에서뿐만 아니라 lot_num 할

model_name 
lot_num 
status_prod2 
last_date 

. 그런 다음 status_prod1, datecreated, date_received를 tbl_prod1 및 status_prod2, last_date에서 조인하십시오.

내 SQL 쿼리 :

$query = "SELECT c.model_name, c.lot_num, c.s1, c.s2, c.datecreated, c.date_received, c.last_date 
       FROM (SELECT model_name, lot_num, status_prod1 AS s1, NOT NULL AS s2, datecreated, date_received, NULL AS last_date FROM tbl_product1 WHERE status_prod1 = 'sent' UNION SELECT model_name, lot_num, NOT NULL AS s1, status_prod2 AS s2, NULL AS datecreated, NULL AS date_received, last_date FROM tbl_product2 WHERE status_prod2 = 'sent')c 
    ORDER BY model_name, lot_num ASC"; 

그러나 결과는 나의 기대로하지 않습니다. 이 쿼리를 실행하면 double lot_num 및 model_name이 표시됩니다. 나는 설명하는 방법을 모른다.

예를 들어 내가 내 코드를 실행할 때이 출력이 표시됩니다 :

model_name | lot_num | status_prod1 | status_prod2 
--------------------------------------------------- 
magic1  | 001  | sent   | 
magic1  | 001  |    | sent 
sss  | 100  | sent   | 
ddd  | 222  | sent   | 
ddd  | 222  |    | sent 

이 Supposely 테이블이 좋아한다 :

model_name | lot_num | status_prod1 | status_prod2 
--------------------------------------------------- 
magic1  | 001  | sent   | sent 
sss  | 100  | sent   | 
ddd  | 222  | sent   | sent 

답변

0

당신이 집계으로 원하는 것을 얻을 수 있습니다 :

SELECT c.model_name, c.lot_num, 
     max(c.s1) as s1, max(c.s2) as s2, max(c.datecreated) as date_created, 
     max(c.date_received) as date_received, max(c.last_date) 
FROM (SELECT model_name, lot_num, status_prod1 AS s1, NOT NULL AS s2, datecreated, date_received, NULL AS last_date 
     FROM tbl_product1 
     WHERE status_prod1 = 'sent' UNION ALL 
     SELECT model_name, lot_num, NOT NULL AS s1, status_prod2 AS s2, NULL AS datecreated, NULL AS date_received, last_date 
     FROM tbl_product2 
     WHERE status_prod2 = 'sent' 
    ) c 
GROUP BY c.model_name, c.lot_num 
ORDER BY model_name, lot_num ASC 
+0

꽤 잘 작동합니다! 붙어있는 상황에서 나를 도와 주신 고맙습니다. – den

0

을 그냥 그 7 열을 원하는 경우, 간단한 INNER JOIN 괜찮을거야.

(안된)

SELECT 
    a.model_name, a.lot_num, a.status_prod1, a.datecreated, a.date_received 
    b.status_prod2, b.last_date 
FROM 
    tbl_product1 a 
INNER JOIN 
    tbl_product2 b 
ON 
    a.model_name = b.model_name AND a.lot_num = b.lot_num 
WHERE 
    b.status_prod2 = 'sent' OR a.status_prod1 = 'sent' 
ORDER BY 
    a.model_name, a.lot_num ASC; 
+0

나는 내부는 두 테이블에 존재 MODEL_NAME의 및 lot_num의이 행을 반환합니다 조인 코드를 실행하면 status_prod1 및 status_prod2가 전송되면 model_name 및 lot_num 만 검색합니다. 두 상태 중 하나가 전송되면 포함 시키려고합니다. @Scopey – den

+0

내 편집으로 문제가 해결 되었습니까? 방금 WHERE 절에 "a.status_prod1 = 'sent''"를 추가했습니다. – Scopey

+0

@Sceopey model_name을 기반으로 검색 할 상태이고 lot_num은 tbl_prod1에만 존재합니까? 그게 왜 내가이 두 테이블 사이에 모든 model_name과 lot_num을 결합하는 조합을 사용합니다. 그러나 나는 어떻게 사용하는지 모른다. Pls 나를 도와 – den