使用内连接的相当复杂的SQL语句(我推测)

时间:2013-11-17 20:41:48

标签: php mysql sql

我无法弄清楚如何编写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     |
|---------------------------------------|

非常感谢。

3 个答案:

答案 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