我很难弄清楚如何编写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 |
|---------------------------------------|
提前非常感谢。
我不确定这是否是您唯一的问题,因为您没有指定确切的问题是什么,但查询的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
表有。
您可以通过连接所有三个表来获得具有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
以下命令应能解决此问题我希望它是有用的。
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