我无法弄清楚如何编写SQL查询以返回以下表结构的结果。
我要做的第一件事就是获得一个状态等于1的客户列表:
SELECT * FROM clients WHERE status=1
然后我需要获取属于客户端的所有用户电子邮件地址。我的计划是遍历上面的查询结果并为每个客户端运行多个查询。从表'client_user_list'可以看出,单个用户可以属于多个客户端。
我尝试过这样的事情:
SELECT emailaddress
FROM users
INNER JOIN client_user_list ON users.user_id = client_user_list.user_id
WHERE users.client_id = 1
但它失败了。正如你所看到的,当涉及到这些东西时,我是一个完全新手。任何帮助将不胜感激,或随时指向一个适当的资源,以了解更多。我看过了,但是我还没有找到任何涵盖这样复杂事物的东西。
附加信息:使用外键,客户端之间存在关系< - > client_user_list和client_user_list< - >用户
clients:
|---------------------------------------|
| client_id | client_name | status |
|---------------------------------------|
| 1 | John Doe | 1 |
| 2 | James Doe | 0 |
|---------------------------------------|
client_user_list:
|----------------------|
| client_id | user_id |
|----------------------|
| 1 | 5 |
| 2 | 6 |
| 1 | 6 |
|----------------------|
users:
|---------------------------------------|
| user_id | emailaddress |
|---------------------------------------|
| 5 | notan@email.com |
| 6 | afake@email.com |
|---------------------------------------|
非常感谢。
答案 0 :(得分:3)
我不确定这是否是您唯一的问题,因为您没有指定确切的问题,但查询的WHERE
- 子句包含错误。您的查询应更改为:
SELECT DISTINCT emailaddress
FROM users
INNER JOIN client_user_list ON users.user_id = client_user_list.user_id
WHERE client_user_list.client_id = 1
users
表没有名为client_id
的字段,client_user_list
表没有。
答案 1 :(得分:3)
通过加入所有三个表格,您只能通过一个查询来获取status = 1
和用户的客户:
select clients.client_id, clients.client_name, users.user_id, users.emailaddress
from clients
inner join client_user_list on client_user_list.client_id = clients.client_id
inner join users on client_user_list.user_id = users.user_id
where clients.status = 1
order by clients.client_id, users.user_id
答案 2 :(得分:2)
以下命令应解决此问题 我希望它是有用的。
select distinct use.emailaddress
from clients cli
inner join client_user_list cul on (cli.client_id=cul.client_id)
inner join users use on (cul.user_id = use.user_id)
where cli.status = 1