Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为SQL Select语句引用其他表_Sql - Fatal编程技术网

为SQL Select语句引用其他表

为SQL Select语句引用其他表,sql,Sql,我有两个表,它们通过“debt_key”连接。下面是表结构 注意表格: Note_Key (numeric(9,0),not null) Debtor_Key(numeric(9,0),not null) Debt_Key(numeric(9,0),not null) User_Key(numeric(5,0),not null) Note_Date(datetime, not null) Note_Time(char(8),not null) Note_Text(Char(80),not nu

我有两个表,它们通过“debt_key”连接。下面是表结构

注意表格:

Note_Key (numeric(9,0),not null)
Debtor_Key(numeric(9,0),not null)
Debt_Key(numeric(9,0),not null)
User_Key(numeric(5,0),not null)
Note_Date(datetime, not null)
Note_Time(char(8),not null)
Note_Text(Char(80),not null)
Debt_key
ACCT
债务表:

Note_Key (numeric(9,0),not null)
Debtor_Key(numeric(9,0),not null)
Debt_Key(numeric(9,0),not null)
User_Key(numeric(5,0),not null)
Note_Date(datetime, not null)
Note_Time(char(8),not null)
Note_Text(Char(80),not null)
Debt_key
ACCT
…等等,但我们只需要使用这两个字段

因此,我尝试将带有日期和时间的新注释添加到注释表中。到目前为止,我一直没有成功。以下是我所写内容的基本结果:

INSERT INTO NOTE (b.NOTE_DATE, b.NOTE_TIME, b.NOTE_TEXT)
VALUES('2012-07-11 00:00:00.000','00:00:00','ASSIGNED FOR PI CONTACT')
   SELECT NOTE_DATE, NOTE_TIME, NOTE_TEXT 
   FROM DEBT a JOIN NOTE B ON B.DEBT_KEY = A.DEBT_KEY AND A.DEBT_KEY = '5797071'
当我执行时,它会给我以下错误:

无法将值NULL插入表的“NOTE_KEY”列中 “Ads_Mast.dbo.NOTE”;列不允许空值。插入失败。这个 声明已终止

我无法向Note_key列添加值,因为它是自动递增的。有什么想法吗


谢谢。

如果您试图插入新的注释,那么如果您要加入第二个表,则需要使用
插入到SELECT FROM
。您还需要在Notes表中包含每个字段的值:

INSERT INTO NOTE 
(
    Note_Key,
    Debtor_Key,
    Debt_Key,
    User_Key,
    NOTE_DATE, 
    NOTE_TIME, 
    NOTE_TEXT
)
SELECT b.Note_Key, a.Debtor_Key, a.Debt_Key, b.NOTE_DATE, a.User_Key, b.NOTE_TIME, b.NOTE_TEXT 
FROM DEBT a JOIN NOTE B 
    ON B.DEBT_KEY = A.DEBT_KEY 
WHERE A.DEBT_KEY = '5797071'
如果您知道要提交的所有值,则需要执行以下操作:

INSERT INTO NOTE 
(
    Debtor_Key,
    Debt_Key,
    User_Key,
    NOTE_DATE, 
    NOTE_TIME, 
    NOTE_TEXT
)
VALUES
(
    0, -- the Debtor_Key value
    1, -- the Debt_Key value
    1, -- the User_Key value
    '2012-07-11 00:00:00.000',
    '00:00:00',
    'ASSIGNED FOR PI CONTACT'
)
INSERT INTO NOTE 
(
    Debtor_Key,
    Debt_Key,
    User_Key,
    NOTE_DATE, 
    NOTE_TIME, 
    NOTE_TEXT
)
SELECT a.Debtor_Key
    , a.Debt_Key
    , '2012-07-11 00:00:00.000'
    , a.User_Key
    , '00:00:00'
    , 'ASSIGNED FOR PI CONTACT'
FROM DEBT a JOIN NOTE B 
    ON B.DEBT_KEY = A.DEBT_KEY 
WHERE A.DEBT_KEY = '5797071'
编辑:如果表中有一些常量值和一些值,请执行以下操作:

INSERT INTO NOTE 
(
    Debtor_Key,
    Debt_Key,
    User_Key,
    NOTE_DATE, 
    NOTE_TIME, 
    NOTE_TEXT
)
VALUES
(
    0, -- the Debtor_Key value
    1, -- the Debt_Key value
    1, -- the User_Key value
    '2012-07-11 00:00:00.000',
    '00:00:00',
    'ASSIGNED FOR PI CONTACT'
)
INSERT INTO NOTE 
(
    Debtor_Key,
    Debt_Key,
    User_Key,
    NOTE_DATE, 
    NOTE_TIME, 
    NOTE_TEXT
)
SELECT a.Debtor_Key
    , a.Debt_Key
    , '2012-07-11 00:00:00.000'
    , a.User_Key
    , '00:00:00'
    , 'ASSIGNED FOR PI CONTACT'
FROM DEBT a JOIN NOTE B 
    ON B.DEBT_KEY = A.DEBT_KEY 
WHERE A.DEBT_KEY = '5797071'
但是如果您只想
更新
特定值,则可以使用
更新

UPDATE b
SET NOTE_DATE = '2012-07-11 00:00:00.000'
    , NOTE_TIME = '00:00:00'
    , NOTE_TEXT = 'ASSIGNED FOR PI CONTACT'
FROM Note b
JOIN DEBT a
    ON B.DEBT_KEY = A.DEBT_KEY
WHERE  A.DEBT_KEY = '5797071'

注释
表中有七列-全部
非空
。如果要插入行,则需要为所有七列插入值(或对其具有默认约束)。您的第一个
INSERT
仅尝试插入三列…..但是,这是我能够编辑的唯一三列,这就是为什么我将其编写为仅插入三列。3个外键我无能为力,而Note_键是自动递增的。既然我不能编辑它们,我如何编写它以允许它们自我更新?我希望
债务人_键
债务_键
用户_键
都有默认值,由于它们不是空的,但您没有为它们插入任何值。注释字段中已经有“Notes”,我不能只更新它。债务人密钥、债务密钥和用户密钥都已在其他表(债务人表、债务表和用户表)中。我不明白您的第一段语法是如何工作的。我需要放在该字段中的“note_text”放在哪里?@Mark是否要将注释附加到已存在的注释中?还是需要对所有表进行联接才能获得字段?@标记第一个是在select语句中从表中选择值。