0

我有下表:

+-------+-------+-------------+
|column1|column2|   column3   |
+-------+-------+-------------+
|   2   |   4   |    row 1    |   < compare with this
|   4   |   3   |    row 2    | + < here`s 4
|   5   |   2   |    row 3    | + < here`s 2
|   1   |  NULL |    row 4    | - < no 4 or 2
|   5   |   6   |    row 5    | - < no 4 or 2
|  NULL |   2   |    row 6    | + < here`s 2
+-------+-------+-------------+    

问题是如何找到所有包含至少一个搜索值的行。例如,我需要找到第一行,所以我正在寻找前两列中包含 2 或 4 的行。所以我的输出应该是第 2,3 和 6 行。我不需要找到 NULL 值。

请指教。

4

1 回答 1

1
select *
from foo
where (   2 in (col1, col2)
       or 4 in (col1, col2))
and (col3 <> 'row 1')

SQL 小提琴示例:http ://sqlfiddle.com/#!2/7fd81/5

或者更动态地获取它:

select t.*
from foo t
join (
  select col1, col2 
  from foo 
  where col3 = 'row 1'
) r1 on r1.col1 = t.col1 
     or r1.col2 = t.col2
     or r1.col1 = t.col2
     or r1.col2 = t.col1
where col3 <> 'row 1'

SQLFiddle:http ://sqlfiddle.com/#!2/7fd81/3

于 2013-05-18T07:25:18.877 回答