我有一個輸入1,2和3SQL查詢:選擇記錄,其中3個值都在3列
如何選取這些值是連續記錄?
SELECT *
FROM table
WHERE col1 IN (1, 2, 3)
AND col2 IN (1, 2, 3)
AND col3 in (1, 2, 3)
如果需要速度,是否還需要對col1-col3進行索引?
我有一個輸入1,2和3SQL查詢:選擇記錄,其中3個值都在3列
如何選取這些值是連續記錄?
SELECT *
FROM table
WHERE col1 IN (1, 2, 3)
AND col2 IN (1, 2, 3)
AND col3 in (1, 2, 3)
如果需要速度,是否還需要對col1-col3進行索引?
,如果你需要人至少一列匹配您應該使用與否和..
SELECT *
from table
WHERE col1 in (1,2,3)
OR col2 in (1,2,3)
OR col3 in (1,2,3) ;
您查詢應該工作,你有值1,2,3之一中的所有列
標記您在問題中使用的DBMS。
雖這麼說,假設你想那些具有行(1,2,3)列COL1,COL2,COL3即任何順序
1 2 3
2 1 3
2 3 1
. . .
在Oracle,MySQL和PostgreSQL,你可以這樣做:
select *
from t
where (1, 2, 3) in (
(col1, col2, col3),
(col1, col3, col2),
(col2, col1, col3),
(col2, col3, col1),
(col3, col1, col2),
(col3, col2, col1)
);
感謝您的答案。我測試了古爾夫的代碼。 –
是的,就是這樣。謝謝。我測試和它的作品。我將跟進新的問題和實際數據應用。 –
@Gurv有一個合理的解決方案,但你實際上想要反過來。假設你的數據庫支持這個元組符號,你可以這樣做:
select *
from t
where (col1, col2, col3) in ((1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1));
這種方法的優點是數據庫可以在(col1, col2, col3)
使用索引。
在其他的數據庫,你可以使用相同的索引,要麼or
或union all
:
where (col1 = 1 and col2 = 2 and col3 = 3) or
(col1 = 1 and col2 = 3 and col3 = 2) or
. . .
優化應該是足夠聰明的使用索引在這種情況下。如果不是,你可以進一步與union
/union all
鼓勵它:
select t.*
from t
where (col1 = 1 and col2 = 2 and col3 = 3)
union all
select t.*
from t
where (col1 = 1 and col2 = 3 and col3 = 2)
union all
. . .
我使用這個解決方案。謝謝 –
你可以分享你分貝 –
您使用哪種DBMS樣? – GurV
也添加示例數據和所需結果 – GurV