Estou tentando obter o nome do cliente que tem o maior principal restante.
No meu banco de dados loans.customer_id
está uma chave estrangeira referindo-se a customers.customer_id
;
Estas são as declarações de criação:
CREATE SCHEMA IF NOT EXISTS `mortgages` DEFAULT CHARACTER SET utf8 ;
USE mortgages
;
CREATE TABLE IF NOT EXISTS `mortgages`.`customers` (
`customer_id` INT NOT NULL AUTO_INCREMENT,
`customer_name` VARCHAR(100) NULL,
`customer_address` VARCHAR(200) NULL,
`customer_email` VARCHAR(100) NULL,
PRIMARY KEY (`customer_id`))
ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `mortgages`.`loans` (
`loan_id` INT NOT NULL auto_increment,
`original_principal` DOUBLE NULL,
`remaining_principal` DOUBLE NULL,
`princiapl_paid` DOUBLE AS (original_principal - remaining_principal),
`interest_paid` DOUBLE NULL,
`customer_id` INT NOT NULL,
PRIMARY KEY (`loan_id`),
INDEX `fk_loans_customers_idx` (`customer_id` ASC) VISIBLE,
CONSTRAINT `fk_loans_customers`
FOREIGN KEY (`customer_id`)
REFERENCES `mortgages`.`customers` (`customer_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
Estas são as instruções de inserção que usei:
INSERT INTO customers VALUES
(default, 'Joe', '1313 Mockingbird Ln, Transylvania, PA 19666',
'[email protected]'),
(default, 'Jane', '123 Heaven Blvd, Cloud City, MA 00911', '[email protected]'),
(default, 'Mike', '230860, Club Rd., New York City, NY 10108', '[email protected]'),
INSERT INTO loans VALUES
(default, 245000.00, 198232.21, default, 21833.25, 1),
(default, 708921.50, 551123.80, default, 880082.99, 2),
(default, 99000.00, 1001.12, default, 4591.12, 3),
Eu tentei:
SELECT customers.customer_name, loans.customer_id
from customers, loans
where (loans.remaining_principal=(SELECT MAX(loans.remaining_principal) FROM loans))
isso exibe TODOS os nomes dos clientes ao lado customer_id
do MAX
O que eu quero é exibir UM nome de cliente, que tem o customer_id
de MAX
O que estou recebendo é:
nome do cliente | Identificação do Cliente |
---|---|
Joe | 2 |
Jane | 2 |
Mike | 2 |
O que eu quero é:
nome do cliente | Identificação do Cliente |
---|---|
Jane | 2 |
Você fez uma junção cruzada que combina todas as linhas dos clientes com todas as linhas dos empréstimos, então é claro que também há uma linha para cada cliente combinada com o empréstimo máximo.
Use uma junção interna adequada, em vez de apenas combinar os empréstimos e clientes que realmente pertencem um ao outro.
SELECT co.customer_name,
lo.customer_id
FROM customers co
INNER JOIN loans lo
ON lo.customer_id = co.customer_id
WHERE lo.remaining_principal = (SELECT max(li.remaining_principal)
FROM loans li);
A WHERE
cláusula pode permanecer como está, embora ofereça mais de um cliente, caso haja mais de um compartilhando o mesmo empréstimo máximo. Não sei se você quer isso ou quais seriam os critérios secundários para escolher um cliente deles, então não posso abordar isso mais adiante.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras