2014-06-24 99 views
-1

我試圖運行一個查詢,將比較同一個表中的多個行,並顯示匹配的所有結果。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或tech_id = 2)。所以在這種情況下,結果應該是1和2但不是3.

我查看了子查詢,但無法使其正常工作。任何幫助將非常感激。

+0

不清楚......你能顯示結果集嗎? – panofish

+1

你不能有一個tech_id等於3和1或2在同一時間..? –

+0

我在找的結果集是:| d_id | 1 | 2 –

回答

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 

讓我知道,如果它不工作!

+0

謝謝!!這工作。 –

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 
+0

這不是一個錯字。我基本上想獲得tech_id爲3的所有d_id的列表,然後針對tech_id爲1或2的所有d_id進行過濾,並只獲取其中存在d_id的d_id。 –

+0

所以最終結果應該是| d_id | 1 | 2 –

+0

我可以拉第一個d_ids列表,然後第二個d_ids列表,並在應用程序層進行比較,但是必須有一種方法可以直接在SQL中執行此操作? –

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 
0

與CTE爲 ( SELECT * FROM表 其中tech_id = 3 ) 選擇c.d_id 從CTEÇ 哪裏tech_id = 2或tech_id = 3