2015-11-17 157 views
2

我有以下表:多個where子句

ID Key Value 
1  From x 
1  To Y 
1  CC a 
2  From Z 
2  To X 
2  CC b 
3  From X 
3  To Y 
3  CC c 
4  From X 
4  To Z 
4  CC d 

我想編號1和3作爲結果,使得其中key = 「來自 」和值= 「x」 和其中key =「 To」 和值=「Y」(從 - >爲了應X-> Y) 它應該是這樣的

SELECT Id 
FROM table_name 
WHERE REGEXP_LIKE(KEY, '(^|\s)from(\s|$)', 'i') 
    AND REGEXP_LIKE(value, '(^|\s)x(\s|$)', 'i') 
    AND 
WHERE 
WHERE REGEXP_LIKE(KEY, '(^|\s)to(\s|$)', 'i') 
    AND REGEXP_LIKE(value, '(^|\s)y(\s|$)', 'i') 

是否有可能解決這個問題?

回答

2

使用條件SUM

SqlFiddleDemo

SELECT ID 
FROM Table1 
GROUP BY ID 
HAVING 
     SUM(CASE WHEN "Key" = 'From' and LOWER("Value") = 'x' THEN 1 ELSE 0 END) = 1 
AND SUM(CASE WHEN "Key" = 'To' and LOWER("Value") = 'y' THEN 1 ELSE 0 END) = 1 

輸出

| ID | 
|----| 
| 1 | 
| 3 | 
+0

當我有多個To的時候,這也可以嗎?請在下面看到我的問題。 – priya

+0

是的,我的解決方案適用於多個To。也許你想改變'THEN 1 ELSE 0 END)> = 1'如果你有'X - >(Y,Y)'你也可以嘗試修改SqlFiddle。使用「文本到DDL」函數來加載新表的數據。 –

+0

你檢查過嗎?這解決了你的問題? –

0

加入表本身並相應地進行篩選。

SELECT ID 
    FROM 
      Table t1 
      INNER JOIN Table t2 
      ON t1.ID = t2.ID 
    WHERE 
      t1.Key = 'From' AND 
      t1.Value = 'x' AND 
      t2.Key = 'To' AND 
      t2.Value = 'y' 
+0

謝謝兔子:)讓我試試吧! – priya