phép nói rằng tôi có một cơ sở dữ liệu SQLite có chứa một bảng:Tại sao CHỌN 0, ... thay vì CHỌN
sqlite> create table person (id integer, firstname varchar, lastname varchar);
Bây giờ tôi muốn để có được tất cả các mục mà là trong bảng.
sqlite> select t0.id, t0.firstname, t0.lastname from person t0;
Điều này làm việc tốt và điều này tôi sẽ sử dụng. Tuy nhiên tôi đã làm việc với một khuôn khổ từ Apple (Core Data) tạo ra SQL. Khung công tác này tạo ra một truy vấn SQL hơi khác:
sqlite> select 0, t0.id, t0.firstname, t0.lastname from person t0;
Mọi truy vấn SQL được tạo bởi khung này bắt đầu bằng "chọn 0". Tại sao vậy?
Tôi đã cố gắng sử dụng lệnh giải thích để xem điều gì đang xảy ra nhưng điều này không thuyết phục - ít nhất là với tôi.
sqlite> explain select t0.id, t0.firstname, t0.lastname from person t0;
addr opcode p1 p2 p3 p4 p5 comment
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
0 Trace 0 0 0 00 NULL
1 Goto 0 11 0 00 NULL
2 OpenRead 0 2 0 3 00 NULL
3 Rewind 0 9 0 00 NULL
4 Column 0 0 1 00 NULL
5 Column 0 1 2 00 NULL
6 Column 0 2 3 00 NULL
7 ResultRow 1 3 0 00 NULL
8 Next 0 4 0 01 NULL
9 Close 0 0 0 00 NULL
10 Halt 0 0 0 00 NULL
11 Transactio 0 0 0 00 NULL
12 VerifyCook 0 1 0 00 NULL
13 TableLock 0 2 0 person 00 NULL
14 Goto 0 2 0 00 NULL
Và bảng cho truy vấn thứ hai trông như thế này:
sqlite> explain select 0, t0.id, t0.firstname, t0.lastname from person t0;
addr opcode p1 p2 p3 p4 p5 comment
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
0 Trace 0 0 0 00 NULL
1 Goto 0 12 0 00 NULL
2 OpenRead 0 2 0 3 00 NULL
3 Rewind 0 10 0 00 NULL
4 Integer 0 1 0 00 NULL
5 Column 0 0 2 00 NULL
6 Column 0 1 3 00 NULL
7 Column 0 2 4 00 NULL
8 ResultRow 1 4 0 00 NULL
9 Next 0 4 0 01 NULL
10 Close 0 0 0 00 NULL
11 Halt 0 0 0 00 NULL
12 Transactio 0 0 0 00 NULL
13 VerifyCook 0 1 0 00 NULL
14 TableLock 0 2 0 person 00 NULL
15 Goto 0 2 0 00 NULL
Nhưng hằng '0' là * không * từ bảng B; nó được trả lại vô điều kiện trong mọi bản ghi kết quả. –
@CL. Chỉnh sửa để làm cho nó rõ ràng hơn những gì tôi có ý nghĩa. – hvd
Nhưng Dữ liệu cốt lõi đặt '0' vào truy vấn ngoài cùng. –