-1

我已经搜索和搜索,但找不到我要找的东西。当谈到 SQL 时,我并非完全无能,但这超出了我的能力范围。

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

表 - LName 字段
名称

表 - 描述
字段名称
字段 添加
字段 作业

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

表描述在除“名称”字段之外的所有字段中都有数据。

我需要将表 LName 中的字段“名称”中的数据放入表描述中的字段“名称”中。

要么将两个表合并到一个包含所有字段但没有数据的表(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

4 回答 4

1

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

UPDATE LNAME DESCRIPTION
INNER JOIN DESCRIPTION ON
   DESCRIPTION.id = LNAME.id 
SET DESCRIPTION.field_name  = LNAME.field_name;
于 2013-12-24T23:13:10.420 回答
1

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

根据您在之前的编辑中所说的内容,我想知道中的所有记录CMPALTDEV是否实际上是彼此重复的(有足够的副本来匹配 中的记录数ALLISERIES)。如果是这样,那么最简单的做法可能就是放弃任何加入的尝试,只需CMPALTDEV通过蛮力插入值即可。例如,如果空白并且'AS400 PRIM'实际上是您尝试与每个值关联的常ALLISERIES.SYSNAM量值,则制作一个空副本CMPALTDEV(我将调用它CMPALTDEV2)并硬编码常量值,如下所示:

INSERT INTO CMPALTDEV2
  SELECT SYSNAM, '', 'AS400 PRIM' FROM ALLISERIES

另一方面,如果值CMPALTDEV不同,并且您真正想要做的是通过“相对记录号”匹配,IBM 确实为您提供了RRN这样做的功能:

INSERT INTO CMPALTDEV2
  SELECT T1.SYSNAM, T2.DIADEV, T2.DITOPG
  FROM ALLISERIES T1                        
    JOIN CMPALTDEV T2 ON RRN(T1) = RRN(T2)

请注意:使用相对记录号是在 SQL 中做任何事情的一种非常骇人听闻的方式。它充满了潜在的陷阱,并且确实违背了 SQL 的本意。SQL 的大多数实现(对于其他数据库)没有类似的东西RRN,最好的做法是避免使用它,如果你能提供帮助,即使在 IBM i 上也是如此。

于 2013-12-26T15:30:37.580 回答
0

您可以创建一个新表:

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

但是我不知道您为什么要这样做...我的意思是,您需要 LName 表和 Description 表之间的关系,例如通用 ID 之类的...

你到底想做什么?

于 2013-12-24T23:22:59.057 回答
0
INSERT INTO Description (FieldName) 
SELECT FieldName FROM LName

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

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

于 2013-12-25T00:23:32.943 回答