У меня есть следующие таблицы:SQLite ошибки в объединяемых таблицах
PRAGMA foreign_keys = ON;
CREATE TABLE products(
'_id' INTEGER PRIMARY KEY AUTOINCREMENT,
'name' VARCHAR(20),
'price' INTEGER
);
CREATE TABLE orders(
'_id' INTEGER PRIMARY KEY AUTOINCREMENT,
'order_number' INTEGER,
'order_sum' INTEGER
);
CREATE TABLE ord_details(
'_id' INTEGER PRIMARY KEY AUTOINCREMENT,
'order_id' INTEGER,
'product_id' INTEGER,
'product_count' INTEGER,
FOREIGN KEY (order_id) REFERENCES orders(_id) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (product_id) REFERENCES products(_id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE ord_times(
'_id' INTEGER PRIMARY KEY AUTOINCREMENT,
'order_id' INTEGER,
'start_t' TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
'end_t' TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (order_id) REFERENCES orders(_id) ON DELETE CASCADE ON UPDATE CASCADE
);
Таким образом, в таблицах имеют следующие данные:
В 'продукты' стола
---------------------
1 | roll | 100
2 | cheese | 500
3 | burger | 300
4 | mega burger | 550
В «заказы ' стол
-------------
1 | 11 | 600
В 'ord_details' стол
--------------
1 | 1 | 1 | 1
1 | 1 | 2 | 1
В 'ord_times' стол
--------------------------------------------------------
1 | 1 | 12/23/2013 12:24:38 PM | 12/23/2013 12:27:02 PM
, когда я выполнить эту команду SQL, и это дает неправильный результат:
SELECT orders.order_number, products.name as prname, products.price, ord_details.product_count, orders.order_sum, ord_times.start_t, ord_times.end_t FROM orders
LEFT JOIN ord_details ON orders._id=ord_details.order_id
LEFT JOIN products ON ord_details.product_id=products._id
LEFT JOIN ord_times ON orders._id=ord_times.order_id
Результаты :
-----------------------------------------------------------------------------------
11 | roll | 100 | 1 | 600 | 12/23/2013 12:24:38 PM | 12/23/2013 12:27:02 PM
11 | cheese | 500 | 1 | 600 | 12/23/2013 12:24:38 PM | 12/23/2013 12:27:02 PM
11 | burger | 300 | 0 | 600 | 12/23/2013 12:24:38 PM | 12/23/2013 12:27:02 PM
11 | mega burger | 550 | 0 | 600 | 12/23/2013 12:24:38 PM | 12/23/2013 12:27:02 PM
Я ожидаю, что в следующий результат:
-----------------------------------------------------------------------------------
11 | roll | 100 | 1 | 600 | 12/23/2013 12:24:38 PM | 12/23/2013 12:27:02 PM
11 | cheese | 500 | 1 | 600 | 12/23/2013 12:24:38 PM | 12/23/2013 12:27:02 PM
Когда я выполняю этот код в SQLite-оболочки win32-x86-3080200 работает нормально:
но выполнить этот SQL в android возвращает неверный результат. Здесь вставив код:
INSERT INTO products (name, price) VALUES ("roll", 100);
INSERT INTO products (name, price) VALUES ("cheese", 500);
INSERT INTO products (name, price) VALUES ("burger", 300);
INSERT INTO products (name, price) VALUES ("mega burger", 550);
INSERT INTO orders (order_number, order_sum) VALUES (11, 600);
INSERT INTO ord_details (order_id, product_id, product_count) VALUES (1, 1, 1);
INSERT INTO ord_details (order_id, product_id, product_count) VALUES (1, 2, 1);
INSERT INTO ord_times (order_id, start_t, end_t) VALUES (1,'12/23/2013 12:24:38 PM', '12/23/2013 12:27:02 PM');
Почему "ord_details.product_id = products._id" выражение не работает в Android?
Hm [ваша точная установка, за исключением отсутствующей запятой в таблице заказов] (HTTP: //sqlfiddle.com/#!7/9dacc/1), кажется, дает ожидаемый результат. –
@Joachim Isaksson вы правы Я ошибся, когда напишу вопрос в Stackoverflow –
-1 То, что вы воспроизводите, невозможно. 'заказы LEFT JOIN ... products' не показывали бы непревзойденные' продукты', а только непревзойденные «заказы». Отправьте свой реальный SQL! Используйте [SQL Fiddle] (http://www.sqlfiddle.com) перед публикацией не возможных результатов. –