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

MySQL如何在同一SELECT语句中将存储函数的结果用作参数,mysql,sql,subquery,inner-join,sql-function,Mysql,Sql,Subquery,Inner Join,Sql Function,所以我的问题是,如何在同一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_volwas

所以我的问题是,如何在同一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
附带建议:

  • 使用表别名缩短查询并提高其可读性,如上图所示

  • 在每个列前面加上它所属的表的(别名),这样查询就不会对底层数据结构产生歧义;
    SELECT
    子句中有一些不合格的列需要修复


您可以嵌套呼叫:

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
附带建议:

  • 使用表别名缩短查询并提高其可读性,如上图所示

  • 在每个列前面加上它所属的表的(别名),这样查询就不会对底层数据结构产生歧义;
    SELECT
    子句中有一些不合格的列需要修复