我有3個表格,client
表格,user
表格和user_has_client
表格。總是顯示連接的左側,並顯示右側,如果有任何並且如果它匹配條款
user_has_client
表有加入其他2個,但它也有roles
列。
MariaDB [extrapack]> desc user;
+----------------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+----------------------+------+-----+---------+----------------+
| user_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| email | varchar(255) | NO | UNI | NULL | |
MariaDB [extrapack]> desc client;
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| client_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
MariaDB [extrapack]> desc user_has_client;
+-----------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| user_id | int(10) unsigned | NO | PRI | NULL | |
| client_id | int(10) unsigned | NO | PRI | NULL | |
| roles | tinytext | YES | | NULL | |
+-----------+------------------+------+-----+---------+-------+
可以有多個不同roles
用於client
和user
,並且roles
列是一個數組。
MariaDB [extrapack]> select * from user_has_client where roles != "" limit 3;
+---------+-----------+---------+
| user_id | client_id | roles |
+---------+-----------+---------+
| 181 | 395 | cpa, ce |
| 181 | 473 | cpa |
| 181 | 498 | cpa |
+---------+-----------+---------+
但是一個客戶端只能向一個用戶提供同一個角色。例如,在同一個客戶端上不能有兩個具有cpa
角色的不同用戶。
我想列出一個客戶端,並且對於客戶端,只列出具有角色cpa
(如果有這樣的用戶)的一個用戶。
這裏是我的發言:
SELECT c.client_id AS client_id0, ou.user_id AS user_id3, ou.email AS email5 FROM client c LEFT JOIN user_has_client ouhc ON c.client_id = ouhc.client_id LEFT JOIN user ou ON ouhc.user_id = ou.user_id AND ouhc.roles LIKE '%cpa%' WHERE c.client_id = 265 ORDER BY ou.email DESC;
有可能會或可能不會是一個client
和user
的連接記錄,但即便如此,我還是想以顯示client
列表行,所以我不能做一個內部連接並且不得不做一個左連接。
但做一個左連接,我仍然只想每個客戶端一個列表行。
截至目前,上述聲明爲我提供了n
行客戶端,對於n
用戶有一個加入此客戶端。但是這些n
用戶中只有一個在其加入中具有cpa
角色。所以我想只顯示一個列表行,並與該用戶。總而言之,我總是希望每個客戶端有一行,並且只有一行,並且與其給定角色的用戶一起說cpa
角色(如果該客戶端有任何角色)。
從問題來看,如果唯一索引是在用戶標識 - 角色字段還是客戶端標識 - 角色組合中,則不完全清楚。 '但是一個客戶只能爲一個用戶提供同一個角色。例如,在兩個不同的客戶端上不能有一個具有cpa角色的相同用戶。「引用的句子不清楚,該示例不適用於引用的第一句。 – Shadow
引述的第二句確實是錯誤的。我的錯。我會在問題中糾正它。它應該是:「例如,在同一個客戶端上不能有兩個具有cpa角色的不同用戶。」 – Stephane
爲了更好地關注實際問題,我重新提出了問題標題。 – Stephane