SQL - 查询后重命名字段

时间:2014-09-19 13:19:03

标签: mysql sql

我与这个人碰壁,但我确定这里有人知道一个方法

我有2个表,例如USERSISSUES。在USERS中,他们说我们需要2列

  • ID
  • 姓名
  • 名字

在'ISSUES`中他们需要2列

  • ID
  • assigned_to_id

我试图在输出上比较和替换字段。 例如if users.id = issues.assigned_to_id 然后打印'users.firstname instead of users.id`

任何帮助都会很棒。欢呼你们。

EDIT;我可以对我需要做的两个查询,第一个是这个;

SELECT assigned_to_id AS Name, COUNT(*) AS Issues FROM issues
WHERE `status_id`=1 
OR `status_id`=2 
OR `status_id`=4
OR `status_id`=7 
OR `status_id`=8 
OR `status_id`=9 
OR `status_id`=10
GROUP BY `assigned_to_id`

和这一个;

SELECT id, firstname FROM users

现在如果users.id = issues.assigned_to_id基本上使用相应的用户名而不是id

4 个答案:

答案 0 :(得分:1)

我没有在您的示例中看到issues.firstName列,因此我假设您的意思是users.firstname

所以要用简单的英语说明你的事后......

您想要返回所有问题,当问题与用户匹配时,会返回用户名而不是问题ID吗?

如果是这样,那么应该这样做(从左到右改变你想要的所有问题)

SELECT coalesce(u.FirstName, to_char(I.ID)) as UserNameOrIssueID
FROM Users U
RIGHT JOIN issues I 
 on U.ID = I.assigned_to_ID

这里棘手的部分是firstname和ID可能是不同的数据类型,因此你必须将user.id强制转换为DB相应语法中的字符字段...

使用显式强制转换(我也假设Issue.ID是一个数字字段,如果它是字符,那么下面的第二个字段将正常工作,因为它甚至不需要进行隐式转换。

SELECT coalesce(u.FirstName, cast(I.ID as char(30)) as UserNameOrIssueID
FROM Users U
RIGHT JOIN issues I 
 on U.ID = I.assigned_to_ID

希望隐含的作品:

SELECT coalesce(u.FirstName, I.ID) as UserNameOrIssueID
FROM Users U
RIGHT JOIN issues I 
 on U.ID = I.assigned_to_ID

答案 1 :(得分:0)

我不知道,如果这是你需要的:

select 
  u.firstname
from 
  users as u,
  issues as i
where 
  u.id = i.assigned_to_id;

答案 2 :(得分:0)

你做不到......只有你改变了表格问题...... 你所能做的就是这个!

SELECT U.firstname FROM USERS U
LEFT JOIN ISSUES I ON U.id = I.assigned_to_id

我稍后会使用alter table推送更新!保持警惕!

<强>更新

IF OBJECT_ID ('tempdb..#TempTable') IS NOT NULL
DROP TABLE #TempTable

SELECT U.firstname INTO #TempTable FROM USERS U
LEFT JOIN ISSUES I ON U.id = I.assigned_to_id

SELECT * FROM #TempTable

-- ALTER TABLE ISSUES ADD firstname varchar(100) -- RUN ONLY ONCE !

UPDATE I 
SET firstname = (SELECT TOP 1 U.firstname FROM USERS U
                    LEFT JOIN ISSUES I ON U.id = I.assigned_to_id)
    FROM ISSUES I

SELECT * FROM ISSUES

答案 3 :(得分:0)

我周末看了一下,这是有效的,并做了我需要它做的事情。谢谢你的帮助。

SELECT COUNT(*) as Issues, assigned_to_id as UserID , users.firstname as Name FROM issues
JOIN users on users.id = issues.assigned_to_id
WHERE `status_id`=1 
OR `status_id`=2 
OR `status_id`=4
OR `status_id`=7 
OR `status_id`=8 
OR `status_id`=9 
OR `status_id`=10
GROUP BY `assigned_to_id`
ORDER BY Issues DESC
相关问题