Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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组\u CONCAT查询不包括记录_Mysql_Join_Select_Where Clause_Group Concat - Fatal编程技术网

MySQL组\u CONCAT查询不包括记录

MySQL组\u CONCAT查询不包括记录,mysql,join,select,where-clause,group-concat,Mysql,Join,Select,Where Clause,Group Concat,我对下面的问题有点不满意。我从几个表中提取数据,并对几行使用GROUP_CONCAT功能。组\u CONCAT根据请求提取自定义字段数据。请求\u ID。但是,并非每个请求\u ID在表字段\u数据中都有一个条目。因此,我的WHERE子句中的这个元素导致了一个问题:data.REQUEST\u ID=requests.REQUEST\u ID 我仍然希望从TABLE\u请求中提取数据,即使TABLE\u字段中没有相应的值。在我当前的查询中,数据被完全省略了 我在我的群组联系声明中尝试了IFNUL

我对下面的问题有点不满意。我从几个表中提取数据,并对几行使用GROUP_CONCAT功能。组\u CONCAT根据
请求提取自定义字段数据。请求\u ID
。但是,并非每个
请求\u ID
表字段\u数据中都有一个条目。因此,我的WHERE子句中的这个元素导致了一个问题:
data.REQUEST\u ID=requests.REQUEST\u ID

我仍然希望从
TABLE\u请求
中提取数据,即使
TABLE\u字段中没有相应的值
。在我当前的查询中,数据被完全省略了

我在我的群组联系声明中尝试了IFNULL,但这似乎没有什么不同。我已经尝试在
data.REQUEST\u ID=requests.REQUEST\u ID
WHERE子句中找出如何执行IF语句,但也没有成功。根据下面的示例数据,查询不会返回请求ID 6000002

我真的很坚持这一点,并将感谢任何帮助

TABLE_requests
+------------+----------------+---------+---------------------+
| REQUEST_ID | REQUEST_STATUS | USER_ID | DATE_CREATE         |
+------------+----------------+---------+---------------------+
| 6000001    | COMPLETE       | 3000001 | 2020-06-01 11:15:16 |
+------------+----------------+---------+---------------------+
| 6000002    | COMPLETE       | 3000001 | 2020-06-02 16:14:11 |
+------------+----------------+---------+---------------------+
| 6000003    | PENDING        | 3000001 | 2020-06-03 12:11:11 |
+------------+----------------+---------+---------------------+

TABLE_fields
+----------+------+---------------+
| FIELD_ID | TYPE | LABEL_en      |
+----------+------+---------------+
| 1        | TEXT | Student Name  |
+----------+------+---------------+
| 2        | TEXT | Student Grade |
+----------+------+---------------+
| 3        | TEXT | Course        |
+----------+------+---------------+

TABLE_fields_data
+---------+------------+----------+------------+
| DATA_ID | REQUEST_ID | FIELD_ID | DATA       |
+---------+------------+----------+------------+
| 1       | 6000001    | 1        | John Smith |
+---------+------------+----------+------------+
| 2       | 6000001    | 2        | 1st Grade  |
+---------+------------+----------+------------+

SELECT 
    requests.REQUEST_ID, requests.REQUEST_STATUS, requests.USER_ID, requests.DATE_CREATE,
    GROUP_CONCAT(data.FIELD_ID SEPARATOR '||') AS CUSTOM_FIELD_ID,
    GROUP_CONCAT(fields.TYPE SEPARATOR '||') AS CUSTOM_FIELD_TYPE, 
    GROUP_CONCAT(fields.LABEL_en SEPARATOR '||') AS CUSTOM_FIELD_LABEL, 
    GROUP_CONCAT(data.DATA SEPARATOR '||') AS CUSTOM_FIELD_DATA
FROM TABLE_requests AS requests, TABLE_fields_data AS data, TABLE_fields AS fields
WHERE requests.REQUEST_STATUS='COMPLETE' AND data.REQUEST_ID=requests.REQUEST_ID AND fields.FIELD_ID=data.FIELD_ID GROUP BY requests.REQUEST_ID;
您正在使用内部联接(旧式),但需要的是左联接:

SELECT 
    requests.REQUEST_ID, requests.REQUEST_STATUS, requests.USER_ID, requests.DATE_CREATE,
    GROUP_CONCAT(data.FIELD_ID SEPARATOR '||') AS CUSTOM_FIELD_ID,
    GROUP_CONCAT(fields.TYPE SEPARATOR '||') AS CUSTOM_FIELD_TYPE, 
    GROUP_CONCAT(fields.LABEL_en SEPARATOR '||') AS CUSTOM_FIELD_LABEL, 
    GROUP_CONCAT(data.DATA SEPARATOR '||') AS CUSTOM_FIELD_DATA
FROM TABLE_requests AS requests
LEFT JOIN TABLE_fields_data AS data ON data.REQUEST_ID = requests.REQUEST_ID
LEFT JOIN TABLE_fields AS fields ON fields.FIELD_ID = data.FIELD_ID
WHERE requests.REQUEST_STATUS = 'COMPLETE' 
GROUP BY requests.REQUEST_ID;
看见