我进行了搜索和搜索,但找不到我想要的东西。在谈到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条记录。
百里
答案 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不是......这是不可能的。