Sql 从同一个表中提取名称
当只有客户映射到名称时,客户列需要名称Sql 从同一个表中提取名称,sql,oracle,Sql,Oracle,当只有客户映射到名称时,客户列需要名称 Customer# | CustomerName| RepayCustomer#| Loan# 123 | John Doe | 456 | 1 456 | Jane Doe | 456 | 2 123 | John Doe | 123 | 3 预期结果 Customer# | CustomerName| RepayCustomer#
Customer# | CustomerName| RepayCustomer#| Loan#
123 | John Doe | 456 | 1
456 | Jane Doe | 456 | 2
123 | John Doe | 123 | 3
预期结果
Customer# | CustomerName| RepayCustomer#| Loan# | RepayCustomer
123 | John Doe | 456 | 1 | Jane Doe
456 | Jane Doe | 456 | 2 | Jane Doe
123 | John Doe | 123 | 3 | John Doe
来自@alexgibbs的答案可以通过使用row_number限制结果来处理他提到的歧义,即存在多个具有相同客户但具有不同客户名称的行。如果有不同的名称,将始终选择按字母顺序排列的第一个名称
SELECT
CUSTOMER.CUSTOMER#,
CUSTOMER.CUSTOMERNAME,
CUSTOMER.REPAYCUSTOMER#,
CUSTOMER.LOAN#,
(SELECT RC2.REPAYCUSTOMER FROM
(SELECT CUSTOMERNAME AS REPAYCUSTOMER,
ROW_NUMBER() AS SEQUENCE_NUMBER
FROM CUSTOMER RC
WHERE RC.CUSTOMER# = CUSTOMER.REPAYCUSTOMER#
ORDER BY RC.CUSTOMERNAME) RC2
WHERE RC2.SEQUENCE_NUMBER = 1)
FROM CUSTOMER;
请参见此处,了解为什么不能简单地使用rownum:假设您的表名为Customer:
SELECT C1.Customer#, C1.CustomerName, C1.RepayCustomer#, C1.Loan#,
C2.CustomerName
FROM Customer C1, (SELECT Customer#, CustomerName
FROM CUSTOMER) C2
WHERE C1.RepayCustomer#=C2.Customer#;
假定每个客户都与单个客户名称唯一关联,则生成预期结果所需的全部都是标量子查询
下面是一个例子
首先创建测试表:
CREATE TABLE CUSTOMER(
CUSTOMER# NUMBER,
CUSTOMERNAME VARCHAR2(64),
REPAYCUSTOMER# NUMBER,
LOAN# NUMBER
);
并加载测试数据:
INSERT INTO CUSTOMER VALUES (123, 'John Doe',456,1);
INSERT INTO CUSTOMER VALUES (456, 'Jane Doe',456,2);
INSERT INTO CUSTOMER VALUES (123, 'John Doe',123,3);
然后运行查询:
SELECT
CUSTOMER.CUSTOMER#,
CUSTOMER.CUSTOMERNAME,
CUSTOMER.REPAYCUSTOMER#,
CUSTOMER.LOAN#,
(SELECT DISTINCT REPAYCUSTOMER.CUSTOMERNAME
FROM CUSTOMER REPAYCUSTOMER
WHERE REPAYCUSTOMER.CUSTOMER# = CUSTOMER.REPAYCUSTOMER# ) AS REPAYCUSTOMER
FROM CUSTOMER;
结果:
CUSTOMER# CUSTOMERNAME REPAYCUSTOMER# LOAN# REPAYCUSTOMER
123 John Doe 456 1 Jane Doe
456 Jane Doe 456 2 Jane Doe
123 John Doe 123 3 John Doe
但是请注意,如果CUSTOMER和CUSTOMERNAME之间的唯一关联存在歧义,例如,如果第一个CUSTOMER 123是John Doe,第二个CUSTOMER 123是WerechewBaca,则此查询将失败,并且应该失败
如果CUSTOMERNAME和CUSTOMER之间的依赖关系为
在这方面,对不同产品的需求得到了缓解
如果可能的话,可能值得考虑提供的表的替代设计。这有助于使这样的获取可靠,并有助于保持数据的完整性以及约束行之间的层次关系 其中哪些是列,哪些是表?它们都是列。我猜customer\u name是customer表中的一列?和/或客户表?我想你问的是你有两张桌子,一张是顾客桌,另一张是顾客桌。您需要对这些表执行联接,并且您想知道如何区分两个表中存在的customer\u name列?不,它们都在同一个表中。客户和客户是两个不同的个体。但是客户也在客户栏中。你能举例说明每栏中的数据类型吗?客户名称是否包含在列中的其他数据中?我认为您可以通过使用行号来解决distinct的问题,当然,您关于整合的观点仍然有效。谢谢大家,它成功了。从Customer.Customer_Number=Psr_Cis和Rownum=1的Customer中选择Distinct Customer.Customer_Name作为Psr_Name,我有很多表加入了如何合并?