Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql内部联接,但不存在时也为NULL_Mysql_Join_Left Join_Inner Join_Outer Join - Fatal编程技术网

mysql内部联接,但不存在时也为NULL

mysql内部联接,但不存在时也为NULL,mysql,join,left-join,inner-join,outer-join,Mysql,Join,Left Join,Inner Join,Outer Join,嗯 我一整天都在努力完成这项工作,但我对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|ticke

我一整天都在努力完成这项工作,但我对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|
我试图得到的是每次输入一行,其中包含票证信息和自定义值。如果没有为此票据设置自定义值,则结果选择中的值必须为空或null:

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;
但这给了我所有的匹配

我尝试了内部联接,但如果没有此票证的自定义值,则没有结果。我还尝试了与工会左、右的外部连接,但没有成功

有什么建议吗?这里的关键词是什么


感谢您的帮助

我认为左连接是一种方式,因为它允许您获取空值。只需在末尾添加GROUPBY语句

GROUP BY t.id

您需要的是一个流程调用pivot。 这主要是通过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)

不,然后我只得到了所有匹配的第一个结果。我不认为你的输出得到了粘贴汉克斯·雷蒙德,这正是我需要的!今晚我给你喝杯啤酒!干杯