信息
我有两张桌子。 accounts
& accounts_groups_assigned
accounts
包含所有帐户信息,accounts_groups_assigned
包含已分配给组的帐户的ID。主要结构不是什么独特的。只是基本的ID列和名称等,如果真的需要我会将它添加到帖子中,但如前所述,它非常通用。
问题
我需要能够从accounts
中选择尚未分配给某个群组的所有帐户。现在这在PHP中相当容易,但我希望能够使用MySQL进行一次查询。
根据要求,表格结构。
accounts
ID | Name
和
accounts_groups_assigned
ID | Group_id | account_id
答案 0 :(得分:1)
这样的东西?
SELECT * FROM accounts a
LEFT JOIN accounts_groups_assigned aga ON a.ID = aga.account_id
WHERE aga.account_id IS NULL
此处LEFT JOIN
将两个表链接在一起,确保显示accounts
的所有记录,即使它们在accounts_groups_assigned
表中没有匹配的行也是如此。如果不匹配,account_id
中的accounts_groups_assigned
将为NULL
。
然后,我们可以使用WHERE aga.accounts_groups_assigned IS NULL
查找account_id
尚未与group_id
相关联的所有情况。
答案 1 :(得分:0)
怎么样?
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
子句通过选择未分配accounts
...的所有accounts_groups_assigned
,为您提供所需的结果。有关JOINS
的详细说明,请参阅this文章。
答案 2 :(得分:0)
我喜欢使用NOT IN来排除来自另一个表的数据,因为它比LEFT JOIN和检查NULL更清楚实际发生的事情。
SELECT
columns
FROM
accounts a
WHERE
a.id NOT IN (
SELECT
account_id
FROM
accounts_groups_assigned
)