【问题标题】:MySQL How can I use the result of a stored function as a paramater in the same SELECT statementMySQL 如何在同一个 SELECT 语句中使用存储函数的结果作为参数
【发布时间】:2020-11-11 14:45:05
【问题描述】:

所以我的问题是,我如何在同一个 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

【问题讨论】:

    标签: mysql sql subquery inner-join sql-function


    【解决方案1】:

    您可以嵌套调用:

    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 子句中有一些不合格的列需要修复

    【讨论】:

      猜你喜欢
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 2014-05-02
      • 2014-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多