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逻辑输出:
pid | uid
1 1
2 1
9 12
10 14然后我想显示用户名,所以我在query中添加了1个字段,如下所示:
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输出:
pid | uid
1 1
2 1
9 9
10 11这不符合逻辑,有人知道为什么吗?让我们假设两者都是正确的,但为什么会输出不同的结果?
发布于 2015-08-25 18:42:10
您的第二个查询是在where条件之前使用连接条件过滤数据,而在第一个查询中您是在where clause...keep中过滤数据。您的第二个查询与第一个查询相同,以获得相同的结果。
在以下查询中尝试-
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发布于 2015-08-25 18:50:04
一个项目ID可以与多个单位相关联,每个单位具有多个预订,因此具有多个用户。你按项目ID分组,但是你没有指定你想要看到的项目ID的所有相关用户中的哪一个。你可以用一个聚合函数来做这件事,比如MIN(users.id),MAX(users.id)等。但是你没有使用这样的函数,因此告诉MySQL:“只需随机给我一个匹配的用户”。
只要你保持你的查询原样,看起来MySQL总是给你相同的用户,也许是它找到的第一个用户。这是不能保证的;您也可以通过相同的查询获得不同的用户。
既然您更改了查询,MySQL将采用另一种方法并选择不同的匹配用户。
https://stackoverflow.com/questions/32201742
复制相似问题