首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输出名称字段为DIfferent,其中输出不带名称字段MYSQL

问输出名称字段为DIfferent,其中输出不带名称字段MYSQL
EN

Stack Overflow用户
提问于 2015-08-25 18:36:30
回答 2查看 22关注 0票数 0
代码语言:javascript
复制
SELECT users.id as uid,   projects.id as pid
            FROM users  
            inner join usergroup on usergroup.id = users.user_group
            inner join bookings on bookings.agent_id = users.id 
            inner join units on bookings.unit = units.id
            inner join types on types.id = units.types_id 
            inner join projects on projects.id = types.project_id
            WHERE bookings.status = 'Accepted' AND units.status = 'Sold'
            GROUP BY  pid

通过上面的查询,我得到了正确的and逻辑输出:

代码语言:javascript
复制
pid   |   uid
1          1
2          1
9          12
10         14

然后我想显示用户名,所以我在query中添加了1个字段,如下所示:

代码语言:javascript
复制
SELECT users.id as uid,  users.f_name, projects.id as pid
            FROM users  
            inner join usergroup on usergroup.id = users.user_group
            inner join bookings on bookings.agent_id = users.id 
            inner join units on bookings.unit = units.id
            inner join types on types.id = units.types_id 
            inner join projects on projects.id = types.project_id
            WHERE bookings.status = 'Accepted' AND units.status = 'Sold'
            GROUP BY  pid

但是我得到了不同的uid输出:

代码语言:javascript
复制
pid    |    uid
1            1
2            1
9            9
10           11

这不符合逻辑,有人知道为什么吗?让我们假设两者都是正确的,但为什么会输出不同的结果?

EN

回答 2

Stack Overflow用户

发布于 2015-08-25 18:42:10

您的第二个查询是在where条件之前使用连接条件过滤数据,而在第一个查询中您是在where clause...keep中过滤数据。您的第二个查询与第一个查询相同,以获得相同的结果。

在以下查询中尝试-

代码语言:javascript
复制
SELECT projects.id as pid, users.id as uid, users.f_name
            FROM users  
            inner join usergroup on usergroup.id = users.user_group
            inner join bookings on bookings.agent_id = users.id 
            inner join units on bookings.unit = units.id  
            inner join types on types.id = units.types_id 
            inner join projects on projects.id = types.project_id
            WHERE bookings.status = 'Accepted' AND units.status = 'Sold'
            GROUP BY  pid
票数 0
EN

Stack Overflow用户

发布于 2015-08-25 18:50:04

一个项目ID可以与多个单位相关联,每个单位具有多个预订,因此具有多个用户。你按项目ID分组,但是你没有指定你想要看到的项目ID的所有相关用户中的哪一个。你可以用一个聚合函数来做这件事,比如MIN(users.id),MAX(users.id)等。但是你没有使用这样的函数,因此告诉MySQL:“只需随机给我一个匹配的用户”。

只要你保持你的查询原样,看起来MySQL总是给你相同的用户,也许是它找到的第一个用户。这是不能保证的;您也可以通过相同的查询获得不同的用户。

既然您更改了查询,MySQL将采用另一种方法并选择不同的匹配用户。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32201742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档