1

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

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

'e' 表示用户名在employer.name,所以 'w' 表示用户名在worker.name.

在此处输入图像描述

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

有没有办法通过单个查询获得用户名(我们还不知道类型)?

虽然如果这种建模有问题请告诉我。

4

1 回答 1

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

类型

  • 身份证(PK
  • 类型名称

  • 身份证(PK
  • 姓名
  • 用户类型 ID ( FK )

你可以很容易地得到每个人的类型,

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

要进一步了解有关联接的更多信息,请访问以下链接:


样本记录

类型

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

╔════╦═════════╦════════════╗
║ 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   ║
╚════╩═════════╩════════════╩══════════╝
于 2013-03-14T09:26:16.263 回答