如何使用用户ID获取用户名?
假设我有3个这样的表,user.type holds
'e'用于雇主,'w'用于工人。
'e'表示用户名在employer.name
上,因此'w'表示该用户名位于worker.name
。
employer.id和worker.id是user.id的外键。
使用单个查询获取用户ID(我们还不知道类型)时,有没有办法获取用户名?
虽然如果这种建模存在问题,请告诉我。
答案 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
实际上,您可以重新设计架构,只需要两个表,Person
和Type
<强>类型强>
<强>人强>
您可以轻松获取每个人的类型,
SELECT a.*,
b.TypeName
FROM Person a
INNER JOIN Type b
ON a.UserTypeID = b.ID
要进一步了解联接,请访问以下链接:
<强> 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 ║
╚════╩═════════╩════════════╩══════════╝