2012-09-30 92 views
0

我正在使用mysql數據庫。查詢獲取mysql中同一列中的多個字段

 id | comment  
--------+--------------- 
    1121 | Accounting 
    1121 | Shipping 
    1121 | Receiving 
    1121 | Testing 
    1122 | Accounting 
    1122 | Receiving 

我想寫這樣的查詢,使O/P會像這個 - :

 id | comment  
--------+--------------- 
    1121 | Accounting 
    1121 | Shipping 
    1121 | Receiving 
    1121 | Testing 

所以我想會計,石屏,驗收和測試意見。

有人可以指導我嗎?

+0

哪個'id'你想要多次出現的評論? – eggyal

+0

對於id 1121我需要評論。基於這些評論我必須更新另一個表 –

+0

那麼爲什麼不簡單地使用'WHERE'子句指定過濾標準:例如, 'SELECT * FROM my_table WHERE id = 1121'? – eggyal

回答

0

是否要選擇所有標識,包含全部4條評論?在你的例子中,1121有4個不同的評論(這就像「狀態」,對吧?),而1122只有2個狀態(評論)。

select T1.id from mytable T1, mytable T2, mytable T3, mytable T3 where T2.id=T1.id and T3.id=T1.id and T4.id=T1.id and T1.comment='Accounting' and T2.comment='Shipping' and T3.comment='Receiving' and T4.id='Shipping' 
+0

沒有。我想爲特定的ID –

+0

「不,我想要那個特定的ID」 - 然後它是微不足道的:SELECT * FROM mytable WHERE id = 1121 – Mentallurg

+0

如果我有時使用這個id它只有會計和運輸或會計,但我想要所有的四個意見。如果所有四個註釋都在那裏,我需要更新狀態在另一個表中關閉 –

1
  • 如果你只想要包含所有四條意見,可以通過id組和過濾這些羣體對於那些包含的記錄所需數目的記錄id

    SELECT id 
    FROM  my_table 
    WHERE comment IN ('Accounting', 'Shipping', 'Receiving', 'Testing') 
    GROUP BY id 
    HAVING COUNT(*) = 4 
    

    sqlfiddle上查看。

  • 如果你想這樣(id, comment)雙完整的記錄,你可以用你的原始表連接的結果:

    SELECT * FROM my_table NATURAL JOIN (
        SELECT id 
        FROM  my_table 
        WHERE comment IN ('Accounting', 'Shipping', 'Receiving', 'Testing') 
        GROUP BY id 
        HAVING COUNT(*) = 4 
    ) t 
    WHERE comment IN ('Accounting', 'Shipping', 'Receiving', 'Testing') 
    

    看到它的sqlfiddle

請注意,如果您的數據模型不保證(id, comment)雙獨特性,你將需要更換COUNT(*)與(少高性能)COUNT(DISTINCT comment)在上面查詢。

相關問題