簡體   English   中英

MySQL在有條件的情況下在一列中連接多行

[英]MySQL Join multiple rows in one column with condition

桌子

ID|NAME |SURNAME
1 |James|Smith
2 |Jack |Sparrow

人事部

IDPERSON|IDDEPARTMENT
1       |1
1       |2
2       |2

ID|NAME
1 |customer_service
2 |store

問題

我需要做的是選擇人員及其部門,並按一個或多個部門進行篩選。 現在,我可以選擇所有人員及其部門,但是無法按部門名稱過濾結果:

SELECT person.name, person.surname, GROUP_CONCAT(distinct department.name SEPARATOR ', ') as departments
LEFT JOIN peopledepartment ON person.id=department.idperson
INNER JOIN department ON peopledepartment.iddepartment=department.id

該查詢的輸出為:

NAME |SURNAME|DEPARTMENTS
James|Smith  |customer_service, store
Jack |Sparrow|store

我需要按department.name ='customer_service'篩選結果,因此結果僅為:

NAME |SURNAME|DEPARTMENTS
James|Smith  |customer_service, store

有任何想法嗎? 提前致謝!

使用having子句:

SELECT p.name, p.surname,
       GROUP_CONCAT(distinct d.name SEPARATOR ', ') as departments
FROM person p INNER JOIN
     peopledepartment pd
     ON p.id = pd.idperson INNER JOIN
     department d
     ON pd.iddepartment = d.id
GROUP BY p.name, p.surname
HAVING SUM(d.name = 'customer_service') > 0;

筆記:

  • group_concat()可能不需要distinct
  • 使用表別名。 這些使編寫和讀取查詢變得更加容易。
  • 您似乎沒有在問題中使用from子句。
  • having子句計算與給定部門匹配的行數。 > 0表示存在至少一個這樣的匹配項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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