Sup*_*NES 2 sql t-sql sql-server-2008
所以,假设我正在尝试获取属于某个用户组的所有用户的列表.简单:
SELECT *
FROM users, usergroups
WHERE usergroups.user_group_id = 1
Run Code Online (Sandbox Code Playgroud)
现在,假设我想获得属于特定用户组的所有用户的列表,以及以.edu结尾的电子邮件.
SELECT *
FROM users, usergroups
WHERE usergroups.user_group_id = 1
AND users.email LIKE '%.edu'
Run Code Online (Sandbox Code Playgroud)
这很好用.现在假设我们想要获得上述所有内容以及属于用户组2的用户 - 但我们并不关心第二组的电子邮件地址.此查询不起作用:
SELECT *
FROM users, usergroups
WHERE usergroups.user_group_id IN (1,2)
AND users.email LIKE '%.edu'
Run Code Online (Sandbox Code Playgroud)
因为它会过滤第二组中的用户.现在我正在做这样的事情:
SELECT *
FROM users as usrs, usergroups as groups1, usergroups as groups2
WHERE (groups1s.user_group_id = 1 AND users.email LIKE '%.edu')
OR groups2.user_group_id = 2
Run Code Online (Sandbox Code Playgroud)
这给了我想要的结果,但我讨厌它看起来和工作的方式.有更清洁的方法吗?
编辑
我没有在上一次迭代中包含连接.这是查询应该是什么样子:
SELECT *
FROM users as usrs JOIN
usergroups as groups1 on usrs.group_id = groups1.group_id JOIN
usergroups as groups2 on usrs.group_id = groups2.group_id
WHERE (groups1.user_group_id = 1 AND users.email LIKE '%.edu')
OR groups2.user_group_id = 2
Run Code Online (Sandbox Code Playgroud)
不需要使用不同的别名选择两次用户组.你可以做到:
SELECT *
FROM users as usrs, usergroups
WHERE (usergroups.user_group_id = 1 AND users.email LIKE '%.edu')
OR usergroups.user_group_id = 2
Run Code Online (Sandbox Code Playgroud)
或者,甚至更好(使用连接):
SELECT *
FROM users as usrs
JOIN usergroups on usergroups.userid = users.id
WHERE (usergroups.user_group_id = 1 AND users.email LIKE '%.edu')
OR usergroups.user_group_id = 2
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
172 次 |
最近记录: |