[英]Fairly complex SQL statement using inner join (I presume)
我在弄清楚如何編寫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
WHERE- 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.