SQL - 将两个表合并为一个公共字段

时间:2013-12-24 22:59:18

标签: sql ibm-midrange iseries-navigator

我进行了搜索和搜索,但找不到我想要的东西。在谈到SQL时我并不完全无能,但这超出了我的范围。

所以我有两个表有一个共同字段。

表 - LName
Feild名称

表 - 描述
字段名称
现场添加
现场工作

现在,表LName只有一个字段,并且已填充。

表格描述包含除“名称”字段以外的所有字段的数据。

我需要将表LName中Field'Name'的数据放入表描述中的Field'Name'。

要么将两个表合并到一个包含所有字段但没有数据的表(File3)中。

感谢任何帮助 百里

更新2: 我能够创建一个符合我想要的逻辑文件,但只返回1条记录。

SQL:

CREATE VIEW MISBXG.TEST_VIEW ( D COLUMN SYSNAM CHAR (8 ) NOT NULL  
 SYSNAM , LT                                                       
 DIADEV ,                                                          
 DITOPG )                                                          
 AS                                                                
 SELECT ALLISERIES.SYSNAM, CMPALTDEV.DIADEV, CMPALTDEV.DITOPG FROM 
ITTOOLS.ALLISERIES ALLISERIES INNER JOIN MISBXG.CMPALTDEV CMPALTDEV
ON ALLISERIES.SYSNAM = CMPALTDEV.SYSNAM WHERE CMPALTDEV.DIADEV <   
ALLISERIES.SYSNAM ;                                                

LABEL ON COLUMN MISBXG.TEST_VIEW                                   
(SYSNAM IS 'System Name' ,                                        
 DIADEV IS 'Alternate           Device' ,                          
 DITOPG IS 'Pager    Name') ; 

查询输出

System Name      Alternate       Pager Name
CHEVY                            AS400 PRIM

所以现在我必须想办法让这个SQL语句读取所有28条记录。

百里

4 个答案:

答案 0 :(得分:1)

没有共同的索引,这使得这个任务看似不可能......所以这个例子只能通过在每个表上实现id的索引并按照分配的索引的顺序设置它们。对不起,如果这令人困惑......

UPDATE LNAME DESCRIPTION
INNER JOIN DESCRIPTION ON
   DESCRIPTION.id = LNAME.id 
SET DESCRIPTION.field_name  = LNAME.field_name;

答案 1 :(得分:1)

你从来没有真正在我的评论中解决我想要的问题,现在你已经编辑了这个问题,所以我的评论甚至没有意义。 (对于它的价值,我对CPYF的建议可能不是一个好主意,但我对你的情况的理解是,而且仍然是,相当缺乏。)

根据您在之前的编辑中所说的内容,我想知道CMPALTDEV中的所有记录是否实际上是彼此重复的(有足够的副本来匹配ALLISERIES中的记录数)。如果是这样,那么最简单的事情就是放弃任何加入的尝试,只需通过强力插入来自CMPALTDEV的值。例如,如果空白和'AS400 PRIM'实际上是您尝试与每个ALLISERIES.SYSNAM值关联的常量值,则制作CMPALTDEV的空副本(我将其称为{ {1}})并且只需对常量值进行硬编码,如下所示:

CMPALTDEV2

另一方面,如果INSERT INTO CMPALTDEV2 SELECT SYSNAM, '', 'AS400 PRIM' FROM ALLISERIES 中的值发生变化,而 想要做的事情与“相对记录号”相匹配,那么IBM确实会为您提供{{1}这样做的功能:

CMPALTDEV

请注意:使用相对记录号是一种在SQL中做任何事情的非常hackish方式。它充满了潜在的陷阱,实际上违背了SQL的意图。 SQL的大多数实现(对于其他数据库)没有类似于RRN的任何内容,最佳实践是如果您可以帮助它,即使在IBM i上也可以避免使用它。

答案 2 :(得分:0)

您可以创建一个新表:

CREATE TABLE new_table AS (SELECT ln.Name, d.Add, d.Job FROM LName ln, Description d);

但我不知道你为什么要这样做......我的意思是,你需要LName表和Description表之间的关系,就像一个普通的id或者什么...

你到底想做什么?

答案 3 :(得分:0)

INSERT INTO Description (FieldName) 
SELECT FieldName FROM LName

是您正在寻找的。这会将LName表中的所有FieldNames放入Description表中 - 然后您可以更新其他字段。

除非您尝试加入两个表,其中Decription.FieldName为空且LName.FieldName不是......这是不可能的。