試圖做同樣的事情this question,但這次在sqlite中。在我目前的應用程序中,我需要能夠做這種類型的查詢:sqlite元組比較
SELECT First, Last, Score
FROM mytable
WHERE
('John', 'Jordan', 5) <= (First, Last, Score)
AND (First, Last, Score) <= ('Mike', 'Taylor', 50)
ORDER BY First, Last, Score
LIMIT 1
,並得到('Liz', 'Jordan', 2)
答案,給出這樣的數據:
+-------+---------+-------+
| First | Last | Score |
+-------+---------+-------+
| Liz | Jordan | 2 |
| John | Jordan | 2 |
| Liz | Lemon | 10 |
| Mike | Taylor | 100 |
| John | Jackson | 1000 |
| Mike | Wayne | 1 |
| Liz | Lemon | 20 |
| Liz | Meyers | 5 |
| Bruce | Jackson | 1 |
+-------+---------+-------+
什麼是實現最有效的方法這在sqlite中?請記住,這是一個玩具示例,而且我的實際應用程序具有包含更多列和數據類型以及數億行的表。
如果解決方案可以輕鬆擴展到更多/更少的列,那就更好了。
元組比較:
元組字典順序,這意味着序列進行排序與它們的第一不同的元件。例如,(1,2,x)<(1,2,y)返回與x < y相同的值。
值得注意的是SQL-92(以及mysql,oracle,postresql)正確地實現了這一點。該標準使用「行值構造函數」來表示我調用的元組。該行爲在part 8.2.7, page 209中極爲詳細地定義。
這裏是必要的SQL創建的例子:
create table mytable (First char(20), Last char(20), Score int);
insert into mytable values ('Liz', 'Jordan', 2);
insert into mytable values ('John', 'Jordan', 2);
insert into mytable values ('Liz', 'Lemon', 10);
insert into mytable values ('Mike', 'Taylor', 100);
insert into mytable values ('John', 'Jackson', 1000);
insert into mytable values ('Mike', 'Wayne', 1);
insert into mytable values ('Liz', 'Lemon', 20);
insert into mytable values ('Liz', 'Meyers', 5);
insert into mytable values ('Bruce', 'Jackson', 1);
create unique index 'UNIQ' on mytable (First, Last, Score);
我不知道是否mysql優化器足夠聰明,知道這與元組語法相同。 – bukzor 2011-04-27 05:38:03
@ bukzor:對。我會糾正我的答案。 – 2011-04-27 11:51:20