目前正在嘗試加入2個表(表程序和表技能要求)但是使用group_concat時,如果組concat列(技能要求)中的資料為空,則不會顯示。
我錯過了任何其他方式或 sql 行嗎?
我的預期結果和當前結果如下:
預期結果:
| 產品 | 程序 | 技能要求 |
|---|---|---|
| 133 | 程序1 | 技能1、技能2、技能3 |
| 133 | 程序2 | 技能1、技能4 |
| 133 | 程序3 | 技能1,技能2 |
| 133 | 程序4 |
當前結果
| 產品 | 程序 | 技能要求 |
|---|---|---|
| 133 | 程序1 | 技能1、技能2、技能3 |
| 133 | 程序2 | 技能1、技能4 |
| 133 | 程序3 | 技能1,技能2 |
這是我的 SQL:
SELECT process.product_id,
process.process_id,
skillrequirement.process_id, GROUP_CONCAT(skillrequirement.skill_req) as skill_req,
process.process
FROM process
JOIN skillrequirement
ON process.process_id = skillrequirement.process_id
WHERE process.product_id ='133'
GROUP BY process.process
更新:
樣本輸入資料 表 1:程序
| process_id | 程序 | product_id |
|---|---|---|
| 1 | 程序1 | 133 |
| 2 | 程序2 | 133 |
| 3 | 程序3 | 133 |
| 4 | 程序4 | 133 |
表二:技能要求
| Skillreq_id | process_id | 技能要求 |
|---|---|---|
| 1 | 1 | 技能1 |
| 2 | 1 | 技能2 |
| 3 | 2 | 技能2 |
| 4 | 3 | 技能3 |
| 5 | 1 | 技能3 |
| 6 | 3 | 技能2 |
uj5u.com熱心網友回復:
您的示例資料與您的預期結果并不真正匹配(例如,您期望流程 2 具有技能 4,但您的示例資料不包含此)。此外,您問題中的查詢無效且無法執行。無論如何,正如我在評論中已經假設的那樣,主要問題是您需要 aLEFT JOIN而不是aINNER JOIN才能顯示沒有技能的流程。如果樣本資料允許,此查詢會產生預期結果:
SELECT p.product_id,
p.process,
GROUP_CONCAT(s.skill_req) AS skill_req
FROM process p
LEFT JOIN skillrequirement s -- Here you need the LEFT JOIN
ON p.process_id = s.process_id
WHERE p.product_id = 133 -- Remove the WHERE clause if not required
GROUP BY p.process;
注意:我不知道您是否需要這樣做,但是如果您想確保串列中的技能始終排序,您可以在ORDER BY該部分添加一個子句GROUP_CONCAT:
SELECT p.product_id,
p.process,
GROUP_CONCAT(s.skill_req ORDER BY s.skill_req) AS skill_req
FROM process p
LEFT JOIN skillrequirement s
ON p.process_id = s.process_id
WHERE p.product_id = 133
GROUP BY p.process;
您可以在此處驗證這一點:db<>fiddle并查看差異。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/533251.html
