我遇到了问题,我的查询中有以下行
CONCAT('',
(SELECT GROUP_CONCAT(DISTINCT trips_loads_rel.load_id,'') AS x
FROM `trips_loads_rel` WHERE trips_loads_rel.trip_id = trips.Id)
) AS loads
它显示8,10,27
(即数字ID),trips_loads_rel
表中的一些ID。它工作正常。但是,如何使用该输出从其他表中提取匹配的记录?我的意思是,这行显示了所有的ID,但是我需要查询其他表来提取相关记录。实际上我不需要这些ID,我需要他们的匹配记录......
答案 0 :(得分:1)
试试这个:
SELECT * FROM <other_table> WHERE <other_table>.load_id IN(CONCAT('',
(SELECT GROUP_CONCAT(DISTINCT trips_loads_rel.load_id,'') AS x
FROM `trips_loads_rel` WHERE trips_loads_rel.trip_id = trips.Id)
) AS loads)
答案 1 :(得分:0)
它看起来像是查询的一部分,而不是整个查询的一部分,因此难以显示确切的语法,但如果您想使用这些值来查找其他行,则不要将它们连接起来进行分组。
而是直接使用它们做类似的事情;
SELECT * FROM `other_table` WHERE `other_table`.`load_id` IN
(SELECT `load_id` FROM `trips_loads_rel` WHERE `trip_id` = `trips`.`Id`)
答案 2 :(得分:0)
您可以使用FIND_IN_SET(col, 'csv as string')
功能获得所需的结果。
示例强> :
mysql> select find_in_set( 2, '11,12,13,14,15,2' );
+--------------------------------------+
| find_in_set( 2, '11,12,13,14,15,2' ) |
+--------------------------------------+
| 6 |
+--------------------------------------+
1 row in set (0.00 sec)
mysql> select find_in_set( 2, '2,11,12,13,14,15,2' );
+----------------------------------------+
| find_in_set( 2, '2,11,12,13,14,15,2' ) |
+----------------------------------------+
| 1 |
+----------------------------------------+
1 row in set (0.00 sec)
mysql> Select FIND_IN_SET( 6, '1,12,3,14,5,16,7,18,9,0,2,13,4,15,6,17,8' );
+--------------------------------------------------------------+
| FIND_IN_SET( 6, '1,12,3,14,5,16,7,18,9,0,2,13,4,15,6,17,8' ) |
+--------------------------------------------------------------+
| 15 |
+--------------------------------------------------------------+
1 row in set (0.00 sec)
mysql>
对于您的查询,您可以传递连接的输出'8,10,27'
以与other_table的列进行比较。
Select find_in_set( other_table.col_name, '8,10,27' );