2013-05-29 3 views
0

비슷한 문제에 대한 기사가 많지만 다음과 같이 해당 사례를 찾을 수있는 것 같지 않습니다.숫자가있는 mysql UNION

나는 열의 수가 일치하도록 널 열을 추가했으며 첫 번째 선택에 명시된 모든 열을 가져야 함을 알고 있습니다. 거기에 문제가 있습니다. 두 번째 선택에서 COUNT에 해당하는 첫 번째 선택 항목에 COUNT 열을 포함시키는 방법을 모르겠습니다.

감사합니다.

먼저 선택

SELECT brands.brand_id, 
     brands.brand, 
     models.model_id, 
     models.model, 
     segments.segment_id, 
     segments.segment, 
     versions.version_id, 
     versions.version, 
     versions.places, 
     versions.gearbox, 
     versions.doors, 
     prices.price 
FROM versions 
     INNER JOIN models USING (model_id) 
     INNER JOIN segments USING (segment_id) 
     INNER JOIN brands USING (brand_id) 
     INNER JOIN prices USING(version_id) 
WHERE price BETWEEN 200001 AND 225000 
     AND brands.active = 'Y' 
     AND models.active = 'Y' 
     AND versions.active = 'Y' 

둘째 선택

SELECT Count(*) AS SafetyItems, 
     version_id, 
     NULL  AS COL3, 
     NULL  AS ...., 
     NULL  AS COL12 
FROM versiontrim 
     INNER JOIN trims USING(trim_id) 
     INNER JOIN versions USING(version_id) 
     INNER JOIN prices USING(version_id) 
     INNER JOIN models USING (model_id) 
     INNER JOIN brands USING (brand_id) 
WHERE trimtype IN('sec', 'help') 
     AND price BETWEEN 200001 AND 225000 
     AND brands.active = 'Y' 
     AND models.active = 'Y' 
     AND versions.active = 'Y' 
GROUP BY version_id 

샘플 결과를 먼저 선택들 : 초

brand_id brand model_id model segment_id version_id  price 
    58 Renault 11  Megane  4   44   209900 
    58 Renault 14  Scenic  5   54   209900 
    58 Renault 11  Megane  4   69   200900 
    71 Toyota  29  Yaris  2   214   200900 
    71 Toyota  30  Auri   4   216   207900 
    52 Nissan  58  Pick-up  14   282   209000 
    24 Ford  21  Focus  4   290   209000 

샘플 결과 I 상기 추가 한 것인지 선택 (가격 열 이후) :

SafetyItems  version_id 
    9    44 
    7    54 
    9    69 
    10    214 
    6    216 
    1    282 
    10    290 
+0

당신이 http://sqlfiddle.com –

+0

DEVAL 안녕하세요, sqlfiddle.com 보았다 일부 샘플 데이터를 넣어 주시겠습니까,하지만 난에 위와 같이 시나리오를 추가하는 방법을 잘 모르겠습니다 : 아래의 솔루션을 참조하십시오 그것. 나는 내가 할 수있는 것을 볼 것이다. – BernardA

+0

http://sqlfiddle.com/#!2/d0dc7/16/0에서 SQL 문을 작성하십시오. –

답변

0

난 당신이 또한 두 번째 SELECT 문에서 COUNT 컬럼에 해당한다 첫 번째 SELECT 문에서 NULL 열을 데려 가고 싶다는 생각한다.

두 번째 SELECT 문과 마찬가지로 NULL 열을 첫 번째 SELECT 문에 입력하면됩니다. UNION은 첫 번째 SELECT의 열 이름을 사용하기 때문에 열의 ALIAS을 잊지 마세요.

SELECT 
NULL AS SafetyItems, 
brands.brand_id, 
brands.brand, 
models.model_id, 
models.model, 
segments.segment_id, 
segments.segment, 
versions.version_id, 
versions.version, 
versions.places, 
versions.gearbox, 
versions.doors, 
prices.price 
FROM versions 
INNER JOIN models 
USING (model_id) 
INNER JOIN segments 
USING (segment_id) 
INNER JOIN brands 
USING (brand_id) 
INNER JOIN prices 
USING(version_id) 
WHERE price BETWEEN 200001 AND 225000 
AND brands.active='Y' 
AND models.active='Y' 
AND versions.active='Y' 

는하지만, 첫 번째 SELECT에서 열 수와 일치하는 두 번째 SELECT 다른 NULL 열을 추가해야합니다. 희망이 당신을 도울 것입니다.

+0

감사합니다. Kael,하지만 그건 작동하지 않습니다. 위의 예는 원하는 결과 인 1을 선택하기 위해 추가되는 열이 아니라 선택 2가 아래에 추가되고 1은 선택되지 않습니다. 나는 명확성을 위해 각각의 선택 샘플을 추가했다. – BernardA

0

내가 잘못된 접근으로이 문제에 대해 알게되었습니다. 처음에는 선택 1의 일부로 COUNT를 사용하여 선택 2를 수행 할 수 없다고 생각했습니다. 가능한 경우 밝혀졌고 약간의 고생을 거친 후에도 처리 할 수있었습니다.

감사합니다.

SELECT brands.brand_id, 
    brands.brand, 
    models.model_id, 
    models.model, 
    segments.segment_id, 
    segments.segment, 
    versions.version_id, 
    versions.version, 
    versions.places, 
    versions.gearbox, 
    versions.doors, 
    prices.price, 
    COUNT(trimtype) 
FROM versions 
    INNER JOIN models USING (model_id) 
    INNER JOIN segments USING (segment_id) 
    INNER JOIN brands USING (brand_id) 
    INNER JOIN prices USING(version_id) 
    INNER JOIN versiontrim USING(version_id) 
    INNER JOIN trims USING(trim_id) 
WHERE price BETWEEN 200001 AND 210000 
    AND trimtype IN('sec', 'help') 
    AND brands.active = 'Y' 
    AND models.active = 'Y' 
    AND versions.active = 'Y' 
GROUP BY version_id