我有以下问题。假设我有一张包含汽车库存的表格:
VIN, MAKE, MODEL, PRICE
而且我有另一个包含各种汽车类别的表(例如,紧凑型、中型、suv 等)
MAKE, MODEL, CLASS
JEEP, NULL , SUV
FORD, EXPLORER, SUV
TOYOTA, YARIS, COMPACT
NULL, CUBE, COMPACT
...
我想知道如何选择某个类别的数据库中的所有汽车?也许,我想知道每个级别有多少辆车?
我可以写一个这样的查询。
SELECT COUNT(*) FROM CARS WHERE (MAKE, MODEL) IN (SELECT MAKE, MODEL FROM CLASSES WHERE CLASS = 'SUV')
这里的问题是,我实际上无法处理数据中的 NULL。我想说JEEP的所有车型都是SUV,或者任何称为CUBE的MAKE汽车都是紧凑型汽车。
假设没有冲突,可以这样做吗?我可以通过执行以下操作设置优先级,例如所有门廊都是汽车,除了 Cayenne 是 SUV 之外:
MAKE, MODEL, CLASS
PORCHE, NULL , CAR
PORCHE, CAYENNE, SUV
如果 MySQL 无法做到这一点,那么是否有更好的数据库技术可以胜任这一点。让我们假设 CLASSES 表将包含 50K+ 行,而 CARS 表将包含 5M+ 行。我正在寻找一种在数据库中执行此类查询的快速方法,并且不需要在脚本中获取数百万行来处理?另外,如果它不仅是品牌和型号,还有子型号、引擎等。
此外,我对数据进行了相当多的简化,有 4 个层次结构。