2011-05-01 7 views
4

첫 번째 DB에 다른 열의 결과를 가져 오는 것을 제외하고는 잘 작동하는 SQL 쿼리가 있습니다. 이 같은 일을하지만, 실제로 그래서 나는 쿼리를 작성하려면 어떻게결과에 추가 필드가있는 SQL UNION 쿼리

SELECT parts1.PART_NBR, parts1.NIIN, parts1.ANOTHER_FIELD 
FROM parts1 
WHERE parts1.PART_NBR='$pn' 
UNION 
SELECT parts2.REFERENCE_NUMBER, parts2.NIIN 
FROM parts2 
WHERE parts2.REFERENCE_NUMBER='$pn' 

:

SELECT parts1.PART_NBR, parts1.NIIN 
FROM parts1 
WHERE parts1.PART_NBR='$pn' 
UNION 
SELECT parts2.REFERENCE_NUMBER, parts2.NIIN 
FROM parts2 
WHERE parts2.REFERENCE_NUMBER='$pn' 

이 나는 ​​기본적으로 (물론이 늘 일을) 원하는 것입니다 : 이것은 내가 현재 가지고있는 것입니다 결과에 여분의 필드가 다시 나타 납니까?

답변

5

반환 NULL

SELECT parts1.PART_NBR, parts1.NIIN, parts1.ANOTHER_FIELD 
FROM parts1 
WHERE parts1.PART_NBR='$pn' 
UNION ALL 
SELECT parts2.REFERENCE_NUMBER, parts2.NIIN, NULL AS ANOTHER_FIELD 
FROM parts2 
WHERE parts2.REFERENCE_NUMBER='$pn' 

편집을 빈 필드를 작성하십시오 귀하의 코멘트에서 당신이

Part Number: 21223 NIIN: 008194914 Name: CAPACITOR 
Part Number: 21223 NIIN: 011241926 Name: HEAT SINK 
Part Number: 21223 NIIN: 003901600 Name: KNIFE 
Part Number: 21223 NIIN: 003901600 Name: 
Part Number: 21223 NIIN: 008194914 Name: 
Part Number: 21223 NIIN: 011241926 Name: 

첫 번째 결과는 표 parts1 두 번째에서 오는대로 결과를보고 있습니다 parts2에서 빈 Name 필드는 NULL을 반환하는 곳입니다. 당신은 그들이 첫 번째 테이블은 또한 Name 필드가 제외하고는 동일한 정보를 포함하는 것 같은이 두 테이블의 결과를 얻기 위해 UNION을 사용하는 이유는 표시되지 않습니다 제공 한 정보에서

.

부품/참조 번호의 테이블을 JOIN으로 선택하는 것이 좋지 않습니까?

편집 : 당신이 당신의 의견에, 이전에 때문에 UNION를 사용하는 DISTINCT 결과 집합을 받고 있다고 말했다으로. NULL 필드를 사용하면 행이 더 이상 고유하지 않으며 쿼리는 모든 행을 반환합니다.

나는 같은 정보가 두 테이블 인 것 같아서 현재 UNION 문이 당신을 위해 무엇을하는지 보지 못했다고 코멘트에서 말했습니다. 당신이 우리에게 말한 것보다이 쿼리에 더 많은 것이 있습니까? 간단한 아래

+0

다시 두 번 첫 번째 세트는 별도의 필드와 seconed 세트 나던 있습니다. – Erik

+0

재미있는 데이터베이스 (SQL Server, MySQL 등)를 사용하고 있습니까? – Tony

+0

부품 번호 : 21223 NIIN : 008194914 이름 : CAPACITOR 부품 번호 : 21223 NIIN : 011241926 이름 : 방열판 부품 번호 : 21223 NIIN : 003901600 이름 : 칼 부품 번호 : 21223 NIIN : 003901600 이름 : 부품 번호 : 21223 NIIN : 008194914 이름 : 부품 번호 : 21223 NIIN : 011241926 이름 : – Erik

0

는 :

select part_number, niin, max(field) 
from (  
    SELECT parts1.PART_NBR part_number, parts1.NIIN niin, parts1.ANOTHER_FIELD field 
    FROM parts1 
    WHERE parts1.PART_NBR='$pn' 
    UNION 
    SELECT parts2.REFERENCE_NUMBER part_number, parts2.NIIN niin, "" field 
    FROM parts2 
    WHERE parts2.REFERENCE_NUMBER='$pn') 
group by part_number, niin 

당신은 첫 번째의 추가 필드의 위치와 일치하는 두 번째 쿼리의 자리를 수용 할 필요가있다.

+0

이것은 결과를 두 번 되돌려줍니다. 두 번째로는 그 분야가 없다. 마찬가지로 : 부품 번호 : 21223 NIIN : 008194914 이름 : CAPACITOR 부품 번호 : 21223 NIIN : 011241926 이름 : 방열판 부품 번호 : 21223 NIIN : 003901600 이름 : 칼 부품 번호 : 21223 NIIN : 003901600 이름 : 부품 번호 : 21223 NIIN : 008194914 이름 : 부품 번호 : 21223 NIIN : 011241926 이름 : – Erik

+0

예상되는 결과물이 원하는 것의 예를 들려 줄 수 있습니까? – cmutt78

+0

부품 번호 : 21223 NIIN : 008194914 이름 : 커패시터 부품 번호 : 21223 NIIN : 011241926 이름 : 열 싱크 부품 번호 : 21223 NIIN : 003901600 이름 : KNIFE – Erik

0

일치하는 열이 있어야하지만 두 번째 열에는 null 또는 원하는 기본값을 사용하는 "가짜"열을 넣을 수 있습니다. 나는 동일한 결과를 얻을 수행 할 때

SELECT parts1.PART_NBR, parts1.NIIN, parts1.ANOTHER_FIELD 
FROM parts1 
WHERE parts1.PART_NBR='$pn' 
UNION 
SELECT parts2.REFERENCE_NUMBER, parts2.NIIN, NULL AS ANOTHER_FIELD 
FROM parts2 
WHERE parts2.REFERENCE_NUMBER='$pn' 
2
SELECT parts.PART_NBR, parts.NIIN, parts1.ANOTHER_FIELD 
FROM (
     SELECT parts1.PART_NBR, parts1.NIIN 
     FROM parts1 
     WHERE parts1.PART_NBR = '$pn' 
     UNION 
     SELECT parts2.REFERENCE_NUMBER, parts2.NIIN 
     FROM parts2 
     WHERE parts2.REFERENCE_NUMBER = '$pn' 
    ) AS parts(PART_NBR, NIIN) 
    LEFT OUTER JOIN parts1 
    ON parts.PART_NBR = parts1.PART_NBR AND 
     parts.NIIN = parts1.NIIN