2011-06-15 102 views
2

可以說我有一個名爲table1的表,它的相應列是col1,col2,col3和col4。分組IN語句sql

會是怎樣做的事相當於:

-- note that the following query will not work 
SELECT * 
    FROM table1 
WHERE col1, col2 IN (SELECT col1, col2 
         FROM table1 
         WHERE col3 < 4) 

我一定要合併col1和COL2在我的數據庫,使這項工作?如果我合併col1和COL2到col1_2然後我就可以通過書面形式作出上述查詢工作:使用一個欄時

SELECT * 
    FROM table1 
WHERE col1_2 IN (SELECT col1_2 
        FROM table1 
        WHERE col3 < 4) 

IN子句工作正常。如果我可以在不需要修改數據庫的情況下將它用於多列,那將會很好。

+0

也許是晚了,但是不是和'SELECT * FROM table1 WHERE col3 2011-06-15 02:47:00

+1

不,它不完全一樣。設想兩行的簡單情況,具有相同的col1,col2值,但是row1具有col3 col4。在所需的情況下,兩行都會被返回。 – 2011-06-15 02:52:13

回答

3
SELECT * from table1 t1, table1 t2 
where t1.col1=t2.col1 and t1.COl2=t2.Col2 and t1.col3<4 

試試這個

+0

嘗試選擇t2。*並且該工作。 – 2011-06-15 02:56:04

0

相當於你表明的是:

SELECT * 
FROM table1 tb1 
WHERE EXISTS 
(
    SELECT * 
    FROM table1 tb2 
    WHERE 
     tb1.col1 = tb2.col1 and 
     tb1.col2 = tb2.col2 and 
     tb2.col3 < 4 
) 

然而,這個查詢請求也沒有太大的意義,因爲它是等價的

SELECT * 
FROM table1 tb1 
WHERE tb2.col3 < 4 

我只是假設你展示的例子沒有經過深思熟慮。