任何人都知道这有什么问题吗?

最初,我有一个没有子查询的查询,但是我在数据库中有文章,每篇文章可以有多个价格,我只需要在总结果集中输入实际价格即可。

错误如标题“#1054-'on子句'中的未知列'a.ArtikelID'”中所述,但这些列都是完全有效的,在我将价格计算划分为子选择之前,所有列都很好。

SELECT `a`.`ArtikelNr`, `at`.`name`, `a`.`LagerPlatz`, `a`.`Bestand`, `a`.`Reserviert`, `a`.`Sperrlager`, (`a`.`Bestand` - `a`.`Reserviert` - `a`.`Sperrlager`) AS `GesamtBestand`, `m`.`Prozent` AS `MwSt%`, `preis`.`Netto` AS `Einzelpreis`, (`preis`.`Netto` * `a`.`Bestand`) AS `Gesamtpreis`
FROM `artikel` a,
    (
        SELECT `psub`.`Netto`
        FROM `artikel` asub
        LEFT JOIN `preis` psub ON `asub`.`ArtikelID` = `psub`.`ArtikelID`
        WHERE `asub`.`Bestandfuehren` = '1' AND `psub`.`PreisArtID` = 2 AND (`psub`.`Bis` = '0001-01-01 00:00:00' OR `psub`.`Bis` >= NOW())
        ORDER BY `psub`.`Von` DESC
        LIMIT 1
    ) AS preis
LEFT JOIN `artikel_text` at ON `a`.`ArtikelID` = `at`.`ArtikelID`
LEFT JOIN `system3zentral`.`mehrwertsteuer` m ON `a`.`MehrwertsteuerID` = `m`.`MehrwertsteuerID`
WHERE `a`.`Bestandfuehren` = '1' AND `at`.`SpracheID` = 1 AND `preis`.`Netto` IS NOT NULL
GROUP BY `a`.`ArtikelNr`
ORDER BY CASE WHEN LENGTH(`a`.`Lagerplatz`) <= 2 THEN 1 ELSE 0 END, `a`.`Lagerplatz` ASC

最佳答案

我自己解决了,谢谢@Strawberry ...

对于构建查询时遇到相同问题的任何人,这里提供的解决方案...

SELECT `a`.`ArtikelNr`, `at`.`name`, `a`.`LagerPlatz`, `a`.`Bestand`, `a`.`Reserviert`, `a`.`Sperrlager`, (`a`.`Bestand` - `a`.`Reserviert` - `a`.`Sperrlager`) AS `GesamtBestand`, `m`.`Prozent` AS `MwSt%`, `preis`.`Netto` AS `Einzelpreis`, (`preis`.`Netto` * ABS(`a`.`Bestand`)) AS `Gesamtwert`
FROM `artikel` a
LEFT JOIN
    (
        SELECT `suba`.`ArtikelID` AS artID, `subp`.`Netto`
        FROM `artikel` suba
        LEFT JOIN `preis` subp ON `suba`.`ArtikelID` = `subp`.`ArtikelID`
        WHERE `suba`.`Bestandfuehren` = '1' AND `subp`.`PreisArtID` = 2 AND (`subp`.`Bis` = '0001-01-01 00:00:00' OR `subp`.`Bis` >= NOW())
        ORDER BY `subp`.`Von` DESC
    ) preis ON `a`.`ArtikelID` = `preis`.`artID`
LEFT JOIN `artikel_text` at USING(ArtikelID)
LEFT JOIN `system3zentral`.`mehrwertsteuer` m USING(`MehrwertsteuerID`)
WHERE `a`.`Bestandfuehren` = '1' AND `at`.`SpracheID` = 1 AND `preis`.`Netto` IS NOT NULL
GROUP BY `a`.`ArtikelNr`
ORDER BY CASE WHEN LENGTH(`a`.`Lagerplatz`) <= 2 THEN 1 ELSE 0 END, `a`.`Lagerplatz` ASC

关于mysql - #1054-'on子句'中的未知列'a.ArtikelID',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30804223/

10-09 04:58