2013-09-05 64 views
1

考慮表SQL掃描上記錄

  Index Col_1 Col_2 Value_of_Interest 
Record_1 1 
Record_2 2 
    . 
    . 
    . 
Record_N N 

我想選擇的記錄集{Record_i}使得Record_i+1Col_1存在{SELECT Col_2 FROM table WHERE Index<i}

例如,考慮表

  Index Col_1 Col_2 Value_of_Interest 
Record_1 1  Ed  Bill   1 
Record_2 2  James Rob   0 
Record_3 3  Tom  Rob   1 
Record_4 4  Bill  Rob   0 

查詢會返回

  Index Col_1 Col_2 Value_of_Interest 
Record_3 3  Tom  Rob   1 

由於Record_4Col_1Bill,這包含在以前記錄的Col_2

是否可以編寫一個執行此操作的SQL查詢?

+1

請問您可以用英語來解釋一下這個問題嗎? –

+0

哈哈,我會再解釋一下。 – rwolst

回答

2
SELECT * 
FROM MyTable AS T1 
WHERE (SELECT Col_1 
     FROM MyTable AS T2 
     WHERE T2.Index = T1.Index + 1 
    ) IN (SELECT Col_2 
      FROM MyTable AS T3 
      WHERE T3.Index < T1.Index) 
0

SQL Fiddle

MySQL的32年5月5日架構設置

CREATE TABLE Table1 
    (`Index` int, `Col_1` varchar(5), `Col_2` varchar(4), `Value_of_Interest` int) 
; 

INSERT INTO Table1 
    (`Index`, `Col_1`, `Col_2`, `Value_of_Interest`) 
VALUES 
    (1, 'Ed', 'Bill', 1), 
    (2, 'James', 'Rob', 0), 
    (3, 'Tom', 'Rob', 1), 
    (4, 'Bill', 'Rob', 0) 
; 

查詢1

SELECT t1.`Index`, t1.Col_1, t1.Col_2, t1.Value_of_Interest 
FROM Table1 t1 
WHERE t1.`index` = 
(SELECT t2.`index`-1 
FROM Table1 t2 
WHERE t2.Col_1 IN 
    (SELECT Col_2 FROM Table1 t3 WHERE t3.`Index` < t2.`Index`)) 

Results

| INDEX | COL_1 | COL_2 | VALUE_OF_INTEREST | 
|-------|-------|-------|-------------------| 
|  3 | Tom | Rob |     1 | 
+0

你爲什麼使用MySQL? –

+0

Oupsss ....沒有看到在SQLFIDDLE中有一個SQLite ...但它是基本的SQL ...所以它的工作原理...可能只是''' –