【问题标题】:Get records not in table (MySQL)获取不在表中的记录(MySQL)
【发布时间】:2014-05-30 15:23:32
【问题描述】:

我有三个表:Member、Meeting 和 Member_Meeting。仅名称就应该放弃它们所包含的内容。 Member 用于注册成员,Meeting 用于过去和未来的会议,Member_Meeting 用于已经或将要参加会议的成员。我可以使用内连接来获取两个表中的数据,左连接来获取两个表中的数据,但也可以使用左连接,右连接来获取两个表中的数据,也可以使用右连接和(完整)外连接来获取来自两个表和右侧的数据走了。但是,我需要的是仅存在于 Member 中而不存在于 Member_Meeting 中的数据。换句话说,我需要获取所有存在但从未参加过会议的成员,因此在 Member_Meeting 中没有记录。我需要的是有点像左连接或右连接,但没有表的共同点。

【问题讨论】:

  • 所以你在使用NOT IN() 函数?
  • 你将如何加入这两个表(Member 和 Member_Meeting)?
  • select * from member where ... not in (select xyz from member_meeting),我想是这样的
  • 类似于SELECT * FROM members WHERE id NOT IN ( SELECT member_id FROM member_meeting )

标签: mysql join


【解决方案1】:

有两种方法可以做到这一点。第一种是使用NOT IN()进行子查询:

SELECT * FROM Member WHERE ID NOT IN(SELECT DISTINCT MemebrID FROM Member_Meeting)

另一种选择是执行LEFT JOIN,然后过滤空值

SELECT Member.* FROM Member
LEFT JOIN Member_Meeting ON Member.ID = Member_Meeting.MemberID
WHERE Member_Meeting.MemberID IS NULL

【讨论】:

  • 我不确定最近的 MySQL 版本是否修复了子查询的性能问题(在 5.1 中,子查询针对主查询中的每一行运行),因此连接可能更快。跨度>
  • 感觉这种join应该有个关键字,比如“ONLY LEFT JOIN”什么的。
猜你喜欢
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
相关资源
最近更新 更多