5

たとえば、さまざまなタイプを含むエンコーディングテーブルがあるとします。

    ID  EncodingName
    ------------------
    1   UTF-8
    2   ISO-8859-1

そして、これらのIDを使用して、変換元と変換先のエンコーディングを追跡する別のEncodingMapping :

    ID  ItemId_FK  EncodingFromId_FK  EncodingToId_FK
    -------------------------------------------------
    1   45         2                  1  
    2   78         1                  2

ItemId_FK = 45の場合(たとえば)、次の結果を生成するSQLステートメントを作成したいと思います。

   FromEncoding  ToEncoding
   -------------------------
   ISO-8859-1    UTF-8

簡単そうに見えますが、この形式で1行を返すだけでは、JOINを機能させることはできません。

私がこれまでに持っているもの(これは間違っています):

   SELECT EncodingName As FromEncoding, EncodingName As ToEncoding
   FROM Encoding
   LEFT JOIN EncodingMapping As em
   ON Encoding.ID = em.EncodingFromId_FK OR Encoding.ID = em.EncodingToId_FK
   WHERE ItemId_FK = 45
4

3 に答える 3

8

閉じますが、葉巻ではありません:

SELECT 
  FromEnc.EncodingName AS FromEncoding, 
  ToEnc.EncodingName AS ToEncoding
FROM EncodingMapping
INNER JOIN Encoding AS FromEnc
  ON FromEnc.ID=EncodingMapping.EncodingFromId_FK
INNER JOIN Encoding AS ToEnc
  ON ToEnc.ID=EncodingMapping.EncodingToId_FK
WHERE EncodingMapping.ItemId_FK = 45
于 2012-09-14T20:41:23.320 に答える
1

同じテーブルを二重に結合する必要があります。

SELECT from.EncodingName AS FromEncoding,
  to.EncodingName AS ToEncoding
FROM EncodingMapping AS m
LEFT JOIN Encoding AS from ON m.EncodingFromId_FK=from.ID
LEFT JOIN Encoding AS to ON m.EncodingToId_FK=to.ID
WHERE ItemId_FK=45

注意として、_FK単純なID列に拡張機能を含めることは少し冗長に思えます。

于 2012-09-14T20:42:16.360 に答える
0

つまり、2つの結合が必要です。1つは「FromEncoding」用で、もう1つは「ToEncoding」用です。

このような:

Select  FromEncoding.Title
,   ToEncoding.Title
    From    EncodingOrder
    Inner   Join
        Encoding        As  FromEncoding
    On  FromEncoding.Id     =   EncodingOrder.From_Encoding_Id
    Inner   Join
        Encoding        As  ToEncoding
    On  ToEncoding.Id       =   EncodingOrder.To_Encoding_Id

乾杯

于 2012-09-14T20:42:33.123 に答える