2013-11-22 127 views
0

我遇到一個問題,我有以下線在我的查詢使用GROUP_CONCAT輸出子查詢

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),有些IDS從trips_loads_rel表。它工作正常。但是,如何使用該輸出從其他表中提取匹配記錄?我的意思是,這一行顯示我所有的ids都可以,但我需要用這些查詢其他表來拉取相關的記錄。其實我不需要這些ID,我需要他們的匹配記錄...

回答

0

它看起來像是查詢的一部分,而不是整個,很難顯示確切的語法,但如果你想使用值來查找其他行,只是不要將它們組合起來。

而是直接使用它們來做類似的事情;

SELECT * FROM `other_table` WHERE `other_table`.`load_id` IN 
    (SELECT `load_id` FROM `trips_loads_rel` WHERE `trip_id` = `trips`.`Id`) 
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'); 

請參閱要MySQL String Functions: FIND_IN_SET()

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) 
+0

好!幾乎在那裏,感謝代碼。我做了以下一半工作:它顯示正確的東西一次,然後它重複相同的許多ID在CSV ...:SELECT trips.Id,GROUP_CONCAT('',(SELECT loads.load_id FROM'loads' WHERE loads.Id IN(SELECT GROUP_CONCAT(trips_loads_rel.load_id,'')AS tmp FROM'trips_loads_rel' WHERE trips_loads_rel.trip_id = trips.Id)))AS從FROM'trips'跳過GROUP BY trips.Id –

+0

對不起......剛試過,如果我在第一個GROUP_CONCAT中放置DISTINCT,它只會顯示一個結果。例如,「L131119-27」是負載ID之一,它應該與L131119-27,L131119-21等一樣,即與匹配的許多負載ID :(無DISTINCT,因爲它重複「L131119-27」是第一場比賽 –

+0

確定試試這一個: DISTINCT(GROUP_CONCAT(trips_loads_rel.load_id)) – uvais