考慮一個表與一個複合主鍵:是否可以在where條件中使用列元組?
create table T (
C1 int not null,
C2 int not null,
...
primary key (C1, C2)
)
和檢索的行大於一定的主鍵元組的問題:
select * from T where (C1, C2) > (10, 100)
上述僞語法無效上MSSQL和甲骨文。它可以實現爲:
select * from T where (C1 = 10 and C2 > 100) or (C1 > 10)
PK的列數越多,得到的醜陋。有沒有這樣做的優雅方式(MSSQL和Oracle)?
此外,利用(C1,C2)上的唯一索引很重要。我不想連接字符串中的列來模擬元組,然後結束表掃描。
我想我不明白你爲什麼認爲這是醜陋的。您要麼在where子句中添加更多列,要麼將更多列添加到組合鍵。只要你從pk中最左邊的列開始,就應該使用索引。我認爲如果它是一個覆蓋索引,你可以跳過列(但可能是錯誤的)。 – Andrew
要看到醜陋,想象一下情況如何尋找10列。如果元組被支持,它就會是(c1,c2,c3,c4,c5,c6,c7,c8,c9,c10)>(?,?,?,?,?,?,?,?,? ?)。我會讓你填寫另一個,它是O(N^2)...另外,在我的真實情況下,這個SQL是動態的,因此生成顯式條件的複雜性更高。 –
我認爲這個問題更多地屬於dba.stackexchange.com。 – Rachcha