2016-02-03 57 views
0

很抱歉的模糊標題,不知道怎麼回事來形容它MySQL查詢顯示其ID的具有特定記錄

基本上我有這樣的(汽車用分離^^)表

id| cars 
------------------------- 
1|car1 ^^ car2 ^^ car3 
2|car2 ^^ car3 
3|car1 
4|car1 ^^ car 2 
5|car3 

基本上我想列出所有的汽車行駛它們匹配喜歡這個

car |id 
------------- 
car1|1,3,4 
car2|1,2,4 
car3|1,2,5 

這是可能在MySQL中做,什麼將是它的查詢ID的?

任何幫助非常感謝!

+0

請告訴我們你已經嘗試了什麼至今 –

+0

我不是很精通MySQL,但 SELECT汽車,ID FROM table_name的 GROUP BY汽車的一些代碼或僞 我還沒有試過,因爲我不能想到 – Leathel

+1

'(用^^分隔的汽車)'修復這個問題,然後回到我們身邊。 – Strawberry

回答

0

這應該工作。我使用表變量「@Cars」填充我的結果,但是,您可以用數據庫中的實際表名替換它。

--Table Defination: 
    DECLARE @Cars TABLE 
    (ID INT IDENTITY, 
    Cars VARCHAR(255) 
    ); 
    INSERT INTO @Cars(Cars) 
    VALUES('car1 ^^ car2 ^^ car3'); 
    INSERT INTO @Cars(Cars) 
    VALUES('car2 ^^ car3'); 
    INSERT INTO @Cars(Cars) 
    VALUES('car1'); 
    INSERT INTO @Cars(Cars) 
    VALUES('car1 ^^ car2'); 
    INSERT INTO @Cars(Cars) 
    VALUES('car3'); 

--SQL 
    SELECT distinct Cars, STUFF(
       (
        SELECT ', '+CAST([id] AS NVARCHAR(256)) 
        FROM 
        (
         SELECT A.id, 
           LTRIM(RTRIM(Split.a.value('.', 'VARCHAR(100)'))) AS Cars 
         FROM 
         (
          SELECT ID, 
            CAST('<M>'+REPLACE(Cars, '^^', '</M><M>')+'</M>' AS XML) AS String 
          FROM @Cars 
         ) AS A 
         CROSS APPLY String.nodes('/M') AS Split(a) 
        ) T1 
        WHERE T1.Cars = T2.Cars 
        FOR XML PATH('') 
       ), 1, 1, '') AS id 
    FROM 
    (
     SELECT A.id, 
       LTRIM(RTRIM(Split.a.value('.', 'VARCHAR(100)'))) AS Cars 
     FROM 
     (
      SELECT ID, 
        CAST('<M>'+REPLACE(Cars, '^^', '</M><M>')+'</M>' AS XML) AS String 
      FROM @Cars 
     ) AS A 
     CROSS APPLY String.nodes('/M') AS Split(a) 
    ) T2; 
+0

嘿感謝我希望我可以通過它的一點點進步了我 調試此我自己的答覆 這是我得到 [ID] AS NVARCHAR(256))FROM('在行3 – Leathel

+0

是錯誤這是一個Sql服務器語法? –

+0

我沒有得到任何錯誤,我添加了表格變量定義,我用它來創建表格。 –