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
子句中有一些不合格的列需要修复
所以我的问题是,如何在同一个 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
子句中有一些不合格的列需要修复