如何在MySQL查询中定义目标表?

时间:2013-03-14 09:23:07

标签: mysql sql database

如何使用用户ID获取用户名?

假设我有3个这样的表,user.type holds 'e'用于雇主,'w'用于工人。

'e'表示用户名在employer.name上,因此'w'表示该用户名位于worker.name

enter image description here

employer.id和worker.id是user.id的外键。

使用单个查询获取用户ID(我们还不知道类型)时,有没有办法获取用户名?

虽然如果这种建模存在问题,请告诉我。

1 个答案:

答案 0 :(得分:2)

直接回答你的问题,

SELECT  a.*,
        IF(a.type = 'e', b.Name, c.Name) PersonName
FROM    User a
        LEFT JOIN Employer b
            ON a.ID = b.ID
        LEFT JOIN Worker c
            ON a.ID = c.ID

实际上,您可以重新设计架构,只需要两个表,PersonType

<强>类型

  • ID( PK
  • 类型名

<强>人

  • ID( PK
  • 名称
  • UserTypeID( FK

您可以轻松获取每个人的类型,

SELECT  a.*,
        b.TypeName
FROM    Person a
        INNER JOIN Type b
            ON a.UserTypeID = b.ID

要进一步了解联接,请访问以下链接:


SAMPLE RECORDS

<强> TYPE

╔════╦══════════╗
║ ID ║ TYPENAME ║
╠════╬══════════╣
║  1 ║ Employee ║
║  2 ║ Worker   ║
╚════╩══════════╝

<强> PERSON

╔════╦═════════╦════════════╗
║ ID ║  NAME   ║ USERTYPEID ║
╠════╬═════════╬════════════╣
║  1 ║ Stacky  ║          2 ║
║  2 ║ Horton  ║          1 ║
║  3 ║ Alam Na ║          1 ║
║  4 ║ Aw aw   ║          2 ║
╚════╩═════════╩════════════╝

查询已经执行后的输出

╔════╦═════════╦════════════╦══════════╗
║ ID ║  NAME   ║ USERTYPEID ║ TYPENAME ║
╠════╬═════════╬════════════╬══════════╣
║  1 ║ Stacky  ║          2 ║ Worker   ║
║  2 ║ Horton  ║          1 ║ Employee ║
║  3 ║ Alam Na ║          1 ║ Employee ║
║  4 ║ Aw aw   ║          2 ║ Worker   ║
╚════╩═════════╩════════════╩══════════╝