2

versiontrim と呼ばれる次のテーブルと、いくつかのサンプル データがあります。

version_id   trim_id
    410        3
    410        5
    410        10
    410        15
    410        20
    411        2
    411        5
    411        15
    411        25
    411        28

別のテーブル trims には、次のように各トリム ID の詳細が保持されます。

 trim_id    trim 
    2       Air conditioner auto            
    3       Air conditioner manual
    5       Airbag
    10      Cloth seats
    25      Leather seats
    etc.....

SET OF 2 version_id ごとに一意の trim_id を抽出しようとしています。結果は次のようになります。

version_id trim_id  trim                   version_id  trim_id     trim
                                           411         2           Air conditioner auto
410        3        Air conditioner manual
410        10       Cloth seats
                                           411         25        Leather seats
410        20       blahblah
                                           411         28         blah....
etc...

以下のクエリを使用して、各セットを個別に取得し、version_id を交換しました。

SELECT version_id, trim_id, trim
FROM versiontrim a
INNER JOIN trims USING(trim_id)
WHERE a.version_id = 411
AND NOT EXISTS
(
 SELECT * FROM versiontrim b 
 INNER JOIN trims USING(trim_id)
 WHERE a.trim_id = b.trim_id
 AND b.version_id = 410
)

適切に出力できるように、クエリを 1 つだけ使用する、より簡単な方法があると確信しています。ご協力いただきありがとうございます。

4

2 に答える 2

1
SELECT 
  CASE 
    WHEN v.version_id = 410 THEN v.version_id
    ELSE ''
  END  AS Left_Version
  ,CASE 
    WHEN v.version_id = 410 THEN v.trim_id
    ELSE ''
  END  AS Left_Trim_id
  ,CASE 
    WHEN v.version_id = 410 THEN t.trim
    ELSE ''
  END  AS Left_Trim
  ,CASE 
    WHEN v.version_id = 411 THEN v.version_id
    ELSE ''
  END  AS Right_Version
  ,CASE 
    WHEN v.version_id = 411 THEN v.trim_id
    ELSE ''
  END  AS Right_Trim_id
  ,CASE 
    WHEN v.version_id = 411 THEN t.trim
    ELSE ''
  END  AS Right_Trim
FROM(SELECT trim_id, COUNT(*)
     FROM versiontrim
     WHERE version_id IN (410,411)
     GROUP BY trim_id
     HAVING COUNT(*) = 1) AS vt
JOIN versiontrim AS v
 ON v.trim_id = vt.trim_id
   AND v.version_id IN (410,411)
JOIN trims AS t
 ON v.trim_id = t.trim_id
GROUP BY v.trim_id
ORDER BY v.trim_id;
于 2013-10-06T13:32:30.863 に答える
0

これを試して::

Select 
 version_id, trim_id, trim
FROM versiontrim a
INNER JOIN trims t on (a.trim_id=t.trim_id)
GROUP BY a.version_id, t.trim_id
于 2013-10-05T15:00:33.127 に答える