MySQL Como faço para usar uma chave estrangeira para identificar uma coluna em outra tabela?

Leo Rodriguez

Estou tentando obter o nome do cliente que tem o maior principal restante.

No meu banco de dados loans.customer_idestá 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_iddo MAX

O que eu quero é exibir UM nome de cliente, que tem o customer_idde 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
pedaço pegajoso

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);

db <> violino

A WHEREclá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.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Como faço para definir minha chave estrangeira para obter uma linha em minha outra tabela? Depuração Laravel 8

Como faço para definir minha chave estrangeira para obter uma linha em minha outra tabela? Depuração Laravel 8

Extraia uma coluna de uma tabela para outra e armazene o id da linha inserida como chave estrangeira (PostgreSQL)

No Mysql como obter registros que para a mesma chave estrangeira tenham todos os valores mostrados em uma lista para outra coluna

Como faço para inserir dados em uma tabela onde um dos valores deve ser uma chave estrangeira de outra tabela?

Não consigo enviar a chave primária de uma tabela para outra como chave estrangeira?

Como faço para que a chave primária seja referenciada por uma chave estrangeira de outra tabela?

Como exibir dados de uma coluna de outra tabela em vez de dados de chave estrangeira para uma tabela de dados

Como faço para converter uma coluna existente em chave estrangeira?

como obter o id do url para adicioná-lo ao banco de dados como uma chave estrangeira em outra tabela

Como atualizar uma coluna que faz parte de uma chave composta e atua como chave primária para uma tabela e como chave estrangeira em outra tabela no Oracle SQL

Como faço para adicionar uma coluna em uma tabela?

No Rails, como faço para criar uma migração que irá adicionar uma coluna / chave estrangeira a uma tabela que é do mesmo tipo daquela tabela?

Como eliminar a restrição única da tabela mysql em uma coluna de chave estrangeira

Obtenha / use a chave primária autoincrementada de um novo registro como uma chave estrangeira para um registro em outra tabela

Como faço para exibir uma coluna de uma tabela para outra tabela

Como posso fazer o link da chave primária do User ID para user_id em outra tabela como uma chave estrangeira?

insira uma chave primária de uma tabela como uma chave estrangeira para outra tabela com php lastInsertId ()

MySQL - Inserindo chave primária de uma tabela para outra (chave estrangeira)

consulta não funciona para chave estrangeira como uma chave primária composta de outra tabela oracle SQL

Como faço para criar uma chave estrangeira na criação da tabela

No SQLite, como altero uma tabela para adicionar uma coluna com restrição de chave estrangeira e nula padrão?

Como faço para criar uma nova tabela com uma coluna de outra tabela no SQL?

Como mesclar linhas de uma tabela para outra, mantendo as restrições de chave estrangeira em colunas geradas automaticamente?

Laravel Eloquent - Usando o id da tabela dinâmica como uma chave estrangeira em outra tabela

Como selecionar registros de uma tabela que não possui chave estrangeira em outra tabela

Como selecionar registros de uma tabela que não possui chave estrangeira em outra tabela

No Fluent / Vapor 4, como faço para filtrar uma lista com base em uma chave estrangeira?

Por que não consigo definir o incremento automático para um campo que é usado como uma chave estrangeira em outra tabela?