为什么这个简单的子查询会得到错误的结果?

时间:2016-10-25 07:11:45

标签: mysql subquery

我的表格包含nammed文件:z_web_dok它有133,369 rows,另一个表格包含产品:z_web_dok_art693,930 rows,查询所需的所有字段都已编入索引,这些表之间的连接是z_web_dok.oidz_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还是什么错误?

结果图: enter image description here

更新:(已解决) 我通过在子查询中使用group来解决它:

Best regards,
Nedžad.
  • (在其中分组,文档和产品),它返回了正确的结果 - 性能良好,0.1704(这很好,因为它在打开时始终是一个文档)。再一次,感谢所有带领我走向正确道路的人

0 个答案:

没有答案