2015-11-17 158 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