MySQL组\u CONCAT查询不包括记录
我对下面的问题有点不满意。我从几个表中提取数据,并对几行使用GROUP_CONCAT功能。组\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
请求提取自定义字段数据。请求\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;
看见