#mysql #sql #subquery #inner-join #sql-function
#mysql #sql #подзапрос #внутреннее соединение #sql-функция
Вопрос:
Итак, мой вопрос в том, как я могу использовать результат berekenKosten()
в качестве параметра nogTeBetalen()
в том же операторе SELECT? Вот мой код:
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
Ответ №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
Побочные рекомендации:
-
используйте псевдонимы таблиц, чтобы сократить запрос и повысить его читаемость, как показано выше
-
сделайте префикс для каждого columnm с (псевдонимом) таблицы, к которой он принадлежит, чтобы запрос был однозначным в отношении базовых структур данных; в предложении есть несколько неквалифицированных столбцов
SELECT
, которые вам нужно будет исправить