如何理解mysql内连接?

时间:2017-01-05 16:36:04

标签: mysql sql

我的查询如下:

users = select * from users where group_id = 1 and track_id = "xxxxxx";
user_ids = [user.id for user in users]
tickets = select * from tickets where group_id = 1 and user_id in (user_ids);

userstickets个表都包含group_id字段。

用户索引表位于group_idtrack_id字段; 故障单索引表位于group_iduser_id字段。

我想将两个sql合并为一个。

select * from tickets join users on tickets.user_id = users.id
where tickets.group_id = 1 and users.track_id = "xxxxx";

select * from tickets join users on tickets.user_id = users.id
where users.group_id = 1 and users.track_id = "xxxxx";;

是不是?哪个更好?我如何加入内部联接的含义,但我想知道我应该使用tickets.group_id还是users.group_id?有什么区别?

如何理解mysql内连接?它是如何运作的?

3 个答案:

答案 0 :(得分:1)

您需要测试两个 group_id字段,就像您在合并的查询中一样。

SELECT *
FROM tickets AS t
JOIN users AS u ON t.user_id = u.user_id
WHERE t.group_id = 1
AND u.group_id = 1

答案 1 :(得分:1)

考虑其他连接条件:如果group_ID在两个表中始终相同,则应将group_ID添加为连接条件,并按或者过滤。

SELECT * 
FROM tickets join users 
  on tickets.user_id = users.id
 and tickets.group_ID = users.group_ID
WHERE tickets.group_id = 1 and users.track_id = "xxxxx";

或者,您必须根据以下两者进行过滤:因为group_ID可能与ticket_ID不同,您必须按两者进行过滤。

这最准确地表示两个查询的并集。如果加入时票证和用户的group_ID不相同。

SELECT * 
FROM tickets join users 
  on tickets.user_id = users.id
WHERE tickets.group_id = 1 
  and users.group_id = 1 
  and users.track_id = "xxxxx";

然而,逻辑上,我们需要在两个表中理解“GROUP_ID”的用途。每个的功能目的是什么?我可以设想出售一组门票......但是我不知道用户如何在静态组中取决于事件,用户可能会在一段时间内在多个组中。

也许你不应该在两个表中都有group_ID?也许您需要一个用户组表...

如果两组代表实体的不同基本属性,则必须单独评估它们;因此第二个查询最有意义。但是,如果它们表示相同的实体属性,则添加到连接条件更有意义

答案 2 :(得分:0)

您的第一个查询将为您提供第1组的所有票证,用户可以在任何组中。第二个查询将为您提供组1中用户的所有票证,即使票证在第2组中。