有人知道这个有什么问题吗?
起初我有一个没有subselect的查询,但我在数据库中有文章,每篇文章可以有多个价格,我只需要在我的总结果集中的实际值。
错误如标题&#34中所述;#1054 - 未知栏' a.ArtikelID'在' on条款' "但是在将价格计算分成一个子选项之前,所有列完全正常之前,这些列都是完全有效的。
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
答案 0 :(得分:0)
自己解决了,谢谢@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