簡體   English   中英

使用內部聯接的相當復雜的SQL語句(我認為)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM