MySQL多行比较

时间:2014-06-24 16:32:08

标签: mysql

我试图运行一个查询来比较同一个表中的多个行,并向我展示所有匹配的结果。

例如,我的数据将如下所示:

+-------------+-----------+---------+------------+-------+
| activity_id | d_id | tech_id | timestamp  | value |
+-------------+-----------+---------+------------+-------+
|    39248078 |    1 |     1 | 2014-03-09 |     1 |
|    39248079 |    2 |     1 | 2014-03-06 |     1 |
|    39248082 |    3 |     1 | 2014-04-09 |     0 |
|    39248085 |    1 |     2 | 2014-03-13 |     1 |
|    39248088 |    3 |     2 | 2014-07-17 |     1 |
|    39248091 |    1 |     3 | 2014-02-07 |     1 |
|    39248093 |    2 |     3 | 2014-12-02 |     0 |
+-------------+-----------+---------+------------+-------+

目标是将所有d_ids设为tech_id = 3 AND(tech_id = 1 OR tech_id = 2)。所以在这种情况下,结果应该是1和2而不是3。

我查看了子查询,但无法让它工作。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

SELECT 
    d_id 
FROM table
WHERE d_id IN(
    SELECT 
        d_id 
    FROM table 
    WHERE tech_id=3
) AND tech_id=1 OR tech_id=2

让我知道它是否有效!

答案 1 :(得分:0)

编辑:

with CTE as 
(
 select * from table
 where tech_id = 3
)
select c.d_id 
from CTE c
where tech_id = 2 or tech_id = 3

答案 2 :(得分:0)

也许是这样的? 我还没有对它进行测试,但据我所知,这样的事情应该可行

SELECT * FROM (
SELECT activity_id, d_id, tech_id, timestamp, value FROM test
WHERE tech_id = 3
) as temp
JOIN test t on t.d_id = temp.d_id
WHERE t.tech_id = 1 OR t.tech_id = 2

答案 3 :(得分:0)

以CTE为 (  从表中选择*  其中tech_id = 3 ) 选择c.d_id 来自CTE c 其中tech_id = 2或tech_id = 3