2016-06-08 5 views
2

Работа с двумя таблицами SQLite, пример ниже. Я хочу, чтобы мне было возвращено имя человека, и их возрастный диапазон, а не диапазон.данные возвращаются как столбец из другой таблицы

SELECT t1.ageRange, t2.name 
FROM Table1 t1 
INNER JOIN Table2 t2 
WHERE t1.rangeId = t2.ageRangeId 
 
. 
. //This code does what I want, but is really inefficient and isn't scalable 
. 

Table1 _____________//table name 
rangeId : ageRange__ //column names 
1 : 0 - 16 ___________//sample data 
2 : 17 - 28 
3 : 29 - 50 
4 : 50+ 
. 
Table2 
name : ageRangeId 
John : 2 
David : 3 
Karl : 2 
Ben : 1 
+1

Я не думаю, что есть лучший путь. – Strawberry

+2

use ON insted of where – JYoThI

+0

... oh, за исключением этого, очевидно, - $ – Strawberry

ответ

2

Внутреннее соединение syntaxe является

FROM Table1 INNER JOIN Table2 ON Table1.key=Table2.key 

Я сделал скрипку. Вот то, что вы хотите:

SELECT t1.ageRange, t2.name 
FROM Table1 t1 
INNER JOIN Table2 t2 
ON t1.rangeId = t2.ageRangeId 

http://sqlfiddle.com/#!9/10c60f/2

Проблема заключается в том, что ваш пример прост и так, как вы сделали это не может быть улучшена. Вы просто присоединяетесь к двум столам. Там вы другой способ сделать это, но все они эквивалентны

0

Попробуйте

SELECT t2.name, t1.ageRange 
FROM Table1 t1 INNER JOIN Table2 t2 ON (t1.rangeId = t2.ageRangeId) 
0

Альтернатива объединения будет correlated subquery:

SELECT name, 
     (SELECT ageRange 
     FROM Table1 
     WHERE rangeId = Table2.ageRangeId 
     ) AS ageRange 
FROM Table2; 
Смежные вопросы