[英]How do I edit a unique column reference as foreign key in another table in mysql?
[英]MySQL How do I use a foreign key to identify a column in another table?
我正在尝试获取拥有最大剩余本金的客户的名称。
在我的数据库loans.customer_id
是一个外键,指的是customers.customer_id
;
这些是创建语句:
CREATE SCHEMA IF NOT EXISTS `mortgages` DEFAULT CHARACTER SET utf8 ;
使用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;
这些是我使用的插入语句:
INSERT INTO customers VALUES
(default, 'Joe', '1313 Mockingbird Ln, Transylvania, PA 19666',
'jsmith@munsters.com'),
(default, 'Jane', '123 Heaven Blvd, Cloud City, MA 00911', 'doejd@aol.com'),
(default, 'Mike', '230860, Club Rd., New York City, NY 10108', 'mikejones@nightclub.com'),
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),
我努力了:
SELECT customers.customer_name, loans.customer_id
from customers, loans
where (loans.remaining_principal=(SELECT MAX(loans.remaining_principal) FROM loans))
这将显示 MAX 的customer_id
旁边的所有客户名称
我想要的是显示一个客户名称,其customer_id
ID 为 MAX
我得到的是:
顾客姓名 | 客户ID |
---|---|
乔 | 2 |
简 | 2 |
麦克风 | 2 |
我想要得到的是:
顾客姓名 | 客户ID |
---|---|
简 | 2 |
你做了一个交叉连接,将客户的每一行与贷款的每一行结合起来,所以当然每个客户也有一行与最大贷款相结合。
而是使用适当的内部连接来组合实际属于一起的贷款和客户。
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);
WHERE
子句可以保持原样,但如果有多个客户共享相同的最大贷款,它会为您提供多个客户。 我不知道,如果你想要这样,或者从他们那里选择一个客户的次要标准是什么,所以我无法进一步解决这个问题。
您可以通过几个子查询来完成此操作:
SELECT customer_name, customer_id
FROM customers
where customer_id = (
SELECT customer_id FROM loans WHERE remaining_principal = (
SELECT MAX(remaining_principal) FROM loans))
您可以简单地:
SELECT loans.customer_id, customers.customer_name
FROM loans
JOIN customers
ON loans.customer_id = customers.customer_id
WHERE (loans.remaining_principal = (SELECT MAX(loans.remaining_principal) FROM loans));
JOIN 允许您从客户表中获取该名称,作为主要数据(即贷款表)的附加组件。
SELECT MAX(remaining_principal),customer_name,customer_id FROM Customers
我希望这有帮助。 还要尽量避免principle_paid = original_principal - remaining_principal
,它是remaining_principal = original_principal - principle_paid
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.