我有三个表,products
,variants
和data
。
每个产品都有它自己的productcode
。产品可以有任意数量的变体,包括没有变体。变体有自己的代码variantcode
。产品有一个productid
列,每个变体都有一个相关的productid
列。
我想要所有代码的列表,但我只关心productcode
产品是否没有变体。否则我想要variantcode
. 我写了这个查询来得到这个列表:
SELECT IFNULL(variants.variantcode, products.productcode) AS code
FROM products
LEFT OUTER JOIN variants ON (products.productid = variants.productid)
ORDER BY code
此查询按我的预期工作。
该data
表包含每个代码的额外数据。我想将此数据加入此列表。我试过这个查询:
SELECT IFNULL(variants.variantcode, products.productcode) AS code
FROM products
LEFT OUTER JOIN variants ON (products.productid = variants.productid)
LEFT OUTER JOIN data ON (data.partno = code)
ORDER BY code
但我收到错误“'on 子句'中的未知列'代码'”。我认为这与code
生成值有关,所以我尝试了这个查询:
SELECT IFNULL(variants.variantcode, products.productcode) AS code
FROM products
LEFT OUTER JOIN variants ON (products.productid = variants.productid)
LEFT OUTER JOIN data ON (data.partno = IFNULL(variants.variantcode, products.productcode))
ORDER BY code
此查询有效,但花费了很长时间(约 20 秒,而第一次查询 <1 秒)。ON 子句中的 IFNULL 是问题吗?我怎样才能加快速度?