我有三个表,products
,variants
和data
。MySQL查询:当使用ifnull连接表时响应慢
每个产品都有自己的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
但我“在‘关于条款’未知列‘代码’”得到一个错误。我以为这已经是与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秒VS < 1秒第一个查询) 。 ON子句中的IFNULL是否是问题?我如何加快速度?
你需要使用一个派生查询此。 – Kermit