【发布时间】:2012-09-24 21:12:24
【问题描述】:
我有以下问题。假设我有一张包含汽车库存的表格:
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 个层次结构。
【问题讨论】: