如何使用用户 ID 获取用户名?
假设我有 3 个这样的表,user.type holds
'e'代表雇主,'w'代表工人。
'e' 表示用户名在employer.name
,所以 'w' 表示用户名在worker.name
.
employee.id 和 worker.id 是 user.id 的外键。
有没有办法通过单个查询获得用户名(我们还不知道类型)?
虽然如果这种建模有问题请告诉我。
直接回答你的问题,
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
要进一步了解有关联接的更多信息,请访问以下链接:
类型
╔════╦══════════╗
║ 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 ║
╚════╩═════════╩════════════╩══════════╝