2013-10-08 47 views
0

我有MySQL數據庫:如何根據多行數據過濾行

CREATE TABLE `inventory` (
    `id` int(11) NOT NULL auto_increment, 
    `device` int(11) NOT NULL, 
    `property` varchar(40) NOT NULL, 
    `value` varchar(200)); 

包含類似的數據:

1, 1, 'code', '123' 
2, 2, 'code', '12345' 
3, 1, 'old_code', '987' 
4, 3, 'code', '12345' 
5, 2, 'old_code', '12345' 

我需要的設備清單,其中「代碼」 < > 'old_code'。 我認爲這應該是可行的,但我的思想無法繞過它。

+2

你可否透露具體是什麼,你需要 –

+3

問題,要求代碼必須證明正在解決這個問題的一個最小的理解。包括**嘗試的解決方案,爲什麼他們不工作,以及預期的結果。** – Kermit

+0

正確的答案是設備= 1,因爲這個代碼= 123和old_code = 987。 – Riho

回答

3

你可以這樣做:

SELECT 
    device 
FROM 
(
    SELECT 
    device, 
    MAX(CASE WHEN property = 'code'  THEN value ELSE NULL END) AS Code, 
    MAX(CASE WHEN property = 'old_code' THEN value ELSE NULL END) AS old_code 
    FROM inventory 
    GROUP BY device 
) AS t 
WHERE code <> old_code; 
+0

謝謝,這是做到了。我的小腦在一天結束時無法完成它:) – Riho

+0

@Riho - 隨時歡迎你:) –

3

使用自聯接:

SELECT new.device 
FROM  inventory AS new 
    JOIN inventory AS old 
     ON old.device = new.device 
    AND old.property = 'old_code' 
    AND new.property = 'code' 
WHERE new.value <> old.value 

看到它的sqlfiddle

+0

+1,很好的答案。 –

0

嘗試自聯接

select a.* from inventory as a join inventory as b on a.device=b.device 
where a.property='code' 
and b.property='old_code' and a.value!=b.value