我的表格包含nammed文件:z_web_dok
它有133,369 rows
,另一个表格包含产品:z_web_dok_art
有693,930 rows
,查询所需的所有字段都已编入索引,这些表之间的连接是z_web_dok.oid
和z_web_dok_art.oid_id
的自动增量字段。
有什么问题?
我做了简单的SQL查询以返回旧价格(按买家,地点,国家/地区)。查询是:
SELECT (COALESCE(NULLIF(TNew.cijena_e,''), TNew.cijena)*(TN.kurs_iznos/1))
FROM z_web_dok_art As TNew
INNER JOIN z_web_dok As TN ON TN.oid=TNew.oid_id
WHERE (TN.Drzava='BiH' AND TNew.aid='SOME_PRODUCT_ID' AND TN.vrsta_dok='pri'
AND TN.kup_id='1047' AND TN.mag_id='5' AND TN.oid<>'151967')
ORDER BY TN.dat_zavrsena DESC
LIMIT 1
并且它对每个产品起作用,所以我在另一个查询中使用它,它获得产品的新价格和上面的查询(子查询)我试图拉旧价格(连接在表之间:{{1} })
TNew.aid=WArt.aid
它在很长一段时间内都有效,但是今天我们发现它的价格比两种产品的旧价格高出6倍(订单中有19种产品)。
所以我查询SELECT WArt.aid, WArt.nc, WArt.isp, COALESCE(NULLIF(WArt.cijena_e,''), WArt.cijena) As cijena, WArt.rab, WArt.vpc, WArt.mpc, C.EAN, C.Model, C.Naziv, C.JM, C.WebBiH, C.DostupnostBiH,
(
SELECT (COALESCE(NULLIF(TNew.cijena_e,''), TNew.cijena)*(TN.kurs_iznos/1))
FROM z_web_dok_art As TNew
INNER JOIN z_web_dok As TN ON TN.oid=TNew.oid_id
WHERE (TN.Drzava='BiH' AND TNew.aid=WArt.aid AND TN.vrsta_dok='pri'
AND TN.kup_id='1047' AND TN.mag_id='5' AND TN.oid<>'151967')
ORDER BY TN.dat_zavrsena DESC
LIMIT 1
) As s_cijena
FROM
z_web_dok_art As WArt
LEFT JOIN Cjenovnik As C ON C.ID=WArt.aid
WHERE WArt.oid_id='151967'
ORDER BY CASE WHEN WArt.isp='0' THEN 1 ELSE 0 END, WArt.id_dok_art
使用相同的查询来查看它从数据库中提取了什么,并且oid具有以下相同的字段:(TN.oid
)但是所有其他字段都不同,即使查询要求{{ 1}}它不会返回结果。
但另一个问题是,如果我仅将查询作为查询执行,那么该产品(或更多)会返回正确的结果。但在一个混合的结果上面是对是非。
解决这个问题不是问题!
我可以解决它,但我想知道为什么这个QUERY不起作用,我的意思是,它有什么问题?有没有人有这个问题?
这是我第一次遇到类似查询的糟糕经历......
我正在考虑,它正在发生,因为子查询JOINS与查询中的另一个表(因为子查询在没有它的父查询的情况下工作正常)。
感谢您的时间!
kup_id, vrsta_dok
重要更新(25.10.2016):
Drzava='BiH' AND TN.mag_id='5'
是mysql 5.5.52-cll还是什么错误?
更新:(已解决) 我通过在子查询中使用group来解决它:
Best regards,
Nedžad.