我的数据库由两个表组成
用户表
+---------+----------+---------------+-----------+
| user_id | username | password_hash | user_type |
+---------+----------+---------------+-----------+
| 1 | Admin | hash | 0 |
| 2 | Student | hash | 1 |
| 3 | Teacher | hash | 2 |
+---------+----------+---------------+-----------+
门票表
+-----------+---------+-----------------+----------------+--------------------+---------------+-------------+
| ticket_id | user_id | ticket_category | ticket_summary | ticket_description | ticket_status | assignee_id |
+-----------+---------+-----------------+----------------+--------------------+---------------+-------------+
| 1 | 2 | Network | Test Network | Lorem Ipsum | 1 | 1 |
| 2 | 3 | Printer | Test Printer | Lorem Ipsum | 1 | |
+-----------+---------+-----------------+----------------+--------------------+---------------+-------------+
tickets.user_id和tickets.assignee_id都是users.user_id的外键
我正在使用以下select语句查询这些表
SELECT username AS `Opened By`, assignee_id AS `Assigned To`, ticket_category AS `Category`, ticket_summary AS `Summary`, ticket_description AS `Description`, IF(ticket_status = 1,'Open','Closed') AS `Status` FROM tickets INNER JOIN users ON tickets.user_id = users.user_id;
这样会建立一个数据集
+-----------+-------------+----------+--------------+-------------+--------+
| Opened By | Assigned To | Category | Summary | Description | Status |
+-----------+-------------+----------+--------------+-------------+--------+
| Student | 1 | Network | Test Network | Lorem Ipsum | Open |
| Teacher | | Printer | Test Printer | Lorem Ipsum | Open |
+-----------+-------------+----------+--------------+-------------+--------+
在我的select语句中,我想用在用户表中也对应的用户名替换assignee_id号。
例如,第一张票证(ticket_id = 1)的被分配人ID为1,我希望“分配给”列显示用户名“ Admin”而不是1
如何修改选择查询以完成此操作?
答案 0 :(得分:1)
只需再次加入assignee_id
的users表即可。请注意,如果没有人分配给故障单,它必须是LEFT JOIN
。您可能还希望在COALESCE
上使用u2.username
输出空白而不是(null)
(即COALESCE(u2.username, '')
)。 SQLFiddle。
SELECT u1.username AS `Opened By`,
u2.username AS `Assigned To`,
ticket_category AS `Category`,
ticket_summary AS `Summary`,
ticket_description AS `Description`,
IF(ticket_status = 1,'Open','Closed') AS `Status`
FROM tickets
JOIN users u1 ON tickets.user_id = u1.user_id
LEFT JOIN users u2 ON tickets.assignee_id = u2.user_id
输出示例数据:
Opened By Assigned To Category Summary Description Status
Student Admin Network Test Network Lorem Ipsum Open
Teacher (null) Printer Test Printer Lorem Ipsum Open
答案 1 :(得分:0)
select T.OpenedBy,u.username as AssignedTo,Category,Summary,Description,Status from
(
SELECT username AS `OpenedBy`, assignee_id , ticket_category AS `Category`, ticket_summary AS `Summary`, ticket_description AS `Description`, IF(ticket_status = 1,'Open','Closed') AS `Status` FROM tickets INNER JOIN users ON tickets.user_id = users.user_id
) as T
inner join
users u on T.assignee_id=u.user_id