Mysql 选择未分配给组的所有行(在另一个表中)
信息 我有两张桌子<代码>科目和Mysql 选择未分配给组的所有行(在另一个表中),mysql,sql,Mysql,Sql,信息 我有两张桌子科目和科目组分配 accounts包含所有帐户信息,并且accounts\u groups\u assigned包含已分配给组的帐户ID。主体结构没有什么独特之处。只是基本的ID列和名称等,如果真的需要,我会把它添加到文章中,但正如前面提到的,它非常通用 问题 我需要能够从账户中选择尚未分配到组的所有账户。现在这在PHP中是相当容易做到的,但我希望能够通过使用MySQL的一个查询来做到这一点 根据要求,提供表格结构 账户 ID| Name 及 分配的科目组 ID |组ID |帐
科目组分配
accounts
包含所有帐户信息,并且accounts\u groups\u assigned
包含已分配给组的帐户ID。主体结构没有什么独特之处。只是基本的ID列和名称等,如果真的需要,我会把它添加到文章中,但正如前面提到的,它非常通用
问题
我需要能够从账户
中选择尚未分配到组的所有账户。现在这在PHP中是相当容易做到的,但我希望能够通过使用MySQL的一个查询来做到这一点
根据要求,提供表格结构
账户
ID| Name
及
分配的科目组
ID |组ID |帐户ID
类似的东西
SELECT * FROM accounts a
LEFT JOIN accounts_groups_assigned aga ON a.ID = aga.account_id
WHERE aga.account_id IS NULL
此处的LEFT JOIN
将两个表链接在一起,确保将显示账户
中的所有记录,即使它们在分配的账户组
表中没有匹配的行。如果不匹配,分配给账户组的账户id
将为NULL
然后,我们可以使用其中aga.accounts\u groups\u assigned为NULL
来查找帐户id
尚未链接到组id
的所有情况,这是怎么回事
SELECT
*
FROM
accounts
LEFT JOIN accounts_groups_assigned groups ON accounts.id = groups.account_id
WHERE
groups.account_id IS NULL;
LEFT JOIN
链接匹配id
字段的表。WHERE
子句通过选择所有未分配帐户组的帐户
,为您提供所需的结果。有关联接的详细说明,请参阅文章
我喜欢使用NOT IN从另一个表中排除数据,因为它比使用LEFT JOIN和检查NULL更清楚实际发生的情况
SELECT
columns
FROM
accounts a
WHERE
a.id NOT IN (
SELECT
account_id
FROM
accounts_groups_assigned
)
@FreshPrinceOfSO我甚至不知道从哪里开始检查查询中的另一个表,我已经尝试研究了左连接和子查询,但是我不确定我应该从子查询中得到什么,这对初始查询有用。最后,感谢您对我可以回复的内容进行编辑。至少,我们需要查看表结构。使用表结构进行更新,希望对您有所帮助。这非常有效!谢谢你努力解决这个问题,而不是为了免费的编辑点而挑剔我的问题。我希望这也能奏效!谢谢您的时间。这也很有效,但是联接
通常比子查询快。最好的方法是使用Show Execution Plan
运行这两个程序并进行比较。但子查询的速度很少更快。