简体   繁体   English

MySQL JOIN用另一个表中的值替换ID

[英]MySQL JOIN to replace IDs with value from another table

Say I have an Encoding table that containing various types, for ex: 假设我有一个包含各种类型的编码表,例如:

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

And another EncodingMapping that uses these IDs to keep track of which encodings to convert From and To: 另一个EncodingMapping使用这些ID来跟踪转换From和To的编码:

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

I want to create an SQL statement that creates the following result when ItemId_FK = 45 (for example): 我想创建一个SQL语句,当ItemId_FK = 45时(例如),它创建以下结果:

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

Seems like it would be simple enough, but I cannot a get a JOIN to work by returning a single row in this format. 看起来它很简单,但我不能通过以这种格式返回单行来获得JOIN工作。

What I have so far (THIS IS WRONG): 我到目前为止(这是错的):

   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

Close, but not cigar: 关闭,但不是雪茄:

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

You just need to double-join the same table: 你只需要加入同一个表:

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

As a note, including the _FK extension on simple ID columns seems a bit redundant. 请注意,在简单ID列上包含_FK扩展名似乎有点多余。

You should have two joins as you mean. 你应该有两个连接。 One for "FromEncoding" and the other for "ToEncoding". 一个用于“FromEncoding”,另一个用于“ToEncoding”。

Like this: 像这样:

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

Cheers 干杯

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM