是否有更好的方法来使用referent表选择值(SQLite)

时间:2015-05-20 10:12:15

标签: android sqlite

我有一个带有汽车代码的参考表,(汽车制造,汽车模型,汽车类型等),在这张表中我有代码。例如:

+--------+--------+--------+--------+
|cr_code |cr_make |cr_model|cr_kind |
+--------+--------+--------+--------+
|1       |22      |345     |10      |     
|2       |22      |341     |5       |  
|3       |26      |458     |8       |  
|4       |26      |459     |77      |  
|5       |26      |501     |11      |  
|6       |39      |552     |2       |  
+--------+--------+--------+--------+

我有桌子car_make,car_model,car_kind到。

例如car_make:

+--------+--------+--------+
|cm_code |cm_id   |cm_name |
+--------+--------+--------+
|1       |22      |mercedes|           
|2       |26      |bmw     |        
|3       |39      |audi    |   
+--------+--------+--------+

例如car_model:

+--------+--------+--------+
|co_code |co_id   |co_name |
+--------+--------+--------+
|1       |458     |520I    |           
|2       |459     |520IA   |        
|3       |501     |523IA   |   
+--------+--------+--------+

现在我需要为用户选择的汽车制造获得所有车型(如果宝马只有宝马车型)。一辆汽车制造商可以拥有多个模型,因为我需要使用参考表来查找我能够展示的id女巫模型。 我在途中使用SQLite select:

SELECT * FROM CAR_MODEL WHERE CO_CODE IN (Select DISTINCT CR_MODEL FROM CARS WHERE CR_MAKE="26") ORDER BY CO_ID ASC

这项工作,并显示确定的结果,但我不确定这是最好的方式吗?

感谢名单

1 个答案:

答案 0 :(得分:1)

请注意,大多数数据库在使用IN子句时会创建子表,该子句将丢弃在引用表上创建的所有索引。这可能成为大型数据集的主要性能问题。

依赖于SQLite的版本,它支持INNER JOIN子句:

SELECT CM.* 
  FROM CAR_MODEL CM 
 INNER JOIN CAR_MAKE MK 
    ON CM.CO_CODE ON MK.CR_MODEL 
 WHERE MK.CM_NAME='BMW'

顺便说一下,您应该考虑使用SQLITE id列来连接引用。

对于大型数据集,还要考虑匹配列索引以获得性能。