MySQL 如何将存储函数的结果用作同一 SELECT 语句中的参数

MySQL How can I use the result of a stored function as a paramater in the same SELECT statement

所以我的问题是,如何在同一个 SELECT 语句中使用 berekenKosten() 的结果作为 nogTeBetalen() 的参数?这是我的代码:

SELECT boeking.Boekingnr, Naam, Telefoonnr, boeking.Aantal_volwassenen, reis.Prijs_per_persoon, boeking.Betaald_bedrag, 
berekenKosten(reis.Prijs_per_persoon, boeking.Aantal_volwassenen) AS totaalprijs, nogTeBetalen()
FROM klant
INNER JOIN boeking ON klant.Klantnr = boeking.Klantnr
INNER JOIN reis ON boeking.Reisnr = reis.Reisnr

如果这不可能,我如何将 nogTeBetalen() 的结果显示为每行的一列?

我已经试过了,但是没用:

SELECT boeking.Boekingnr, Naam, Telefoonnr, boeking.Aantal_volwassenen, reis.Prijs_per_persoon, boeking.Betaald_bedrag, 
berekenKosten(reis.Prijs_per_persoon, boeking.Aantal_volwassenen) AS totaalprijs, nogTeBetalen(totaalprijs)
FROM klant
INNER JOIN boeking ON klant.Klantnr = boeking.Klantnr
INNER JOIN reis ON boeking.Reisnr = reis.Reisnr

您可以嵌套调用:

SELECT 
    b.Boekingnr, 
    Naam, 
    Telefoonnr, 
    b.Aantal_volwassenen, 
    r.Prijs_per_persoon, 
    b.Betaald_bedrag, 
    berekenKosten(r.Prijs_per_persoon, b.Aantal_volwassenen) AS totaalprijs, 
    nogTeBetalen(berekenKosten(r.Prijs_per_persoon, b.Aantal_volwassenen)) as result
FROM klant k
INNER JOIN boeking b ON k.Klantnr = b.Klantnr
INNER JOIN reis r ON b.Reisnr = r.Reisnr

但是使用子查询可能更有效,所以该过程只调用一次:

SELECT t.*, nogTeBetalen(totaalprijs) as result
FROM (
    SELECT 
        b.Boekingnr, 
        Naam, 
        Telefoonnr, 
        b.Aantal_volwassenen, 
        r.Prijs_per_persoon, 
        b.Betaald_bedrag, 
        berekenKosten(r.Prijs_per_persoon, b.Aantal_volwassenen) AS totaalprijs
    FROM klant k
    INNER JOIN boeking b ON k.Klantnr = b.Klantnr
    INNER JOIN reis ON b.Reisnr = r.Reisnr
) t

侧面建议:

  • 使用table别名来缩短查询并增加其可读性,如上所示

  • 为每个列加上它所属的 table 的(别名)前缀,因此查询对底层数据结构是模糊的; SELECT 子句中有一些不合格的列需要修复