我有一个带有汽车代码的参考表,(汽车制造,汽车模型,汽车类型等),在这张表中我有代码。例如:
+--------+--------+--------+--------+
|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
这项工作,并显示确定的结果,但我不确定这是最好的方式吗?
感谢名单
答案 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列来连接引用。
对于大型数据集,还要考虑匹配列索引以获得性能。