gpt4 book ai didi

mysql INNER JOIN 但不存在时也为 NULL

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:08 25 4
gpt4 key购买 nike

好的,

我一整天都在努力完成这项工作,但我对 MySQL 的了解似乎太有限了。

我有下表:

time_entries
|id|comment|ticket_id|
| 1|foo | 1|
| 2|bar | 1|
| 3|baz | 2|
| 4|lorem | 3|
| 5|ipsum | 4|

ticket
|id|name |
| 1|ticket1|
| 2|ticket2|
| 3|ticket3|
| 4|ticket4|


custom_fields
|id|name |
| 1|custom1|
| 2|custom2|
| 3|custom3|

custom_values
|id|custom_field_id|ticket_id|value|
| 1| 1| 1| 22|
| 2| 2| 1| 33|
| 3| 3| 1| 44|
| 4| 1| 2| 55|
| 5| 3| 2| 66|
| 6| 2| 3| 77|
| 7| 1| 4| 88|

我想要得到的是每个 time_entry 一行,其中包含票证信息和自定义值。如果此工单未设置自定义值,则结果选择中的值必须为空或为空:

select
|time_entries_comment|ticket_name|custom1_value|custom2_value|custom3_value|
| foo| ticket1| 22| 33| 44|
| bar| ticket1| 22| 33| 44|
| baz| ticket2| 55| NULL| 66|
| lorem| ticket3| NULL| 77| NULL|
| ipsum| ticket4| 88| NULL| NULL|

到目前为止我得到的是这样的:

select 
te.comment,
t.name,
cv1.value,
cv2.value,
cv3.value

from time_entries te

LEFT JOIN ticket t ON te.ticket_id = i.id

LEFT JOIN custom_values cv1 ON t.id = cv1.ticket_id
LEFT JOIN custom_fields cf1 ON cv1.custom_field_id = cf1.id AND cf1.id = 1

LEFT JOIN custom_values cv2 ON t.id = cv2.ticket_id
LEFT JOIN custom_fields cf2 ON cv2.custom_field_id = cf2.id AND cf2.id = 2

LEFT JOIN custom_values cv3 ON t.id = cv3.ticket_id
LEFT JOIN custom_fields cf3 ON cv3.custom_field_id = cf3.id AND cf3.id = 3

WHERE t.id = 1;

但这给了我所有匹配项。

我尝试了内部连接,但如果这张票没有 custom_value,我就得不到任何结果。我还尝试过使用 UNION Left 和 Right 进行外部连接,但没有成功。

有什么建议要寻找什么吗?这里的关键字是什么?

谢谢你的帮助

最佳答案

您想要的是流程调用枢轴。这主要是通过 GROUP BY 和 MAX 函数完成的。

SELECT 
time_entries.comment AS time_entries_comment
, ticket.name
, MAX(CASE WHEN custom_values.custom_field_id = 1 THEN custom_values.value ELSE NULL END) AS custom1_value
, MAX(CASE WHEN custom_values.custom_field_id = 2 THEN custom_values.value ELSE NULL END) AS custom2_value
, MAX(CASE WHEN custom_values.custom_field_id = 3 THEN custom_values.value ELSE NULL END) AS custom3_value
FROM
time_entries

INNER JOIN
ticket
ON
time_entries.ticket_id = ticket.id

INNER JOIN
custom_values
ON
time_entries.ticket_id = custom_values.ticket_id

GROUP BY
time_entries.comment
, ticket.name

ORDER BY
time_entries.id ASC

结果

time_entries_comment  name     custom1_value  custom2_value  custom3_value  
-------------------- ------- ------------- ------------- ---------------
foo ticket1 22 33 44
bar ticket1 22 33 44
baz ticket2 55 (NULL) 66
lorem ticket3 (NULL) 77 (NULL)
ipsum ticket4 88 (NULL) (NULL)

关于mysql INNER JOIN 但不存在时也为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43762924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com