2017-02-21 16 views
0

サブクエリの結果をテーブルに挿入しようとしていますが、挿入するテーブルに固有のプライマリIDがあります。 EID番号の最大値をとり、テーブルに挿入しようとしているエントリに1を加えたいとします。私はに挿入するSQLサブクエリから一意のIDを生成する

表:

---------------------------------------------------- 
EID (pk)  |  First Name  | Employment Date 
---------------------------------------------------- 
    1   |  John    |  2016-01-01 
    2   |  Joe    |  2013-01-01 
    3   |  Jill    |  2012-01-01 
    4   |  Jen    |  2017-01-01 

マイサブクエリの声明:

(SELECT FIRSTNAME, ORDERDATE as EMPLOYMENTDATE 
    FROM CUSTOMER, ORDER 
WHERE CUSTOMER.id = ORDER.id 
AND ORDERDATE >= DATE '2017-01-01') 

私が生成するユニークなIDを持っていないような問題は、挿入されます。これは、SQL Server上で、私はこのような何かを挿入しようとしています

INSERT INTO EMPLOYEE(EID, FIRSTNAME, EMPLOYMENTDATE) 
SELECT ??????WHAT GOES HERE??????, FIRSTNAME, ORDERDATE as EMPLOYMENTDATE 
    FROM CUSTOMER, ORDER 
WHERE CUSTOMER.id = ORDER.id 
AND ORDERDATE >= DATE '2017-01-01' 
+0

Mysqlまたはsql server?関連タグのみを追加してください – JohnHC

+0

あなたの完全なクエリはどのようなものですか? – artm

+3

EIDがauto_increment(MySQL)で、挿入SQLにEID列が含まれていない場合、それは動作します – SIDU

答えて

0

はEIDがアイデンティティであると仮定すると、これはどのようにある:あなたがしているので、あなたは、正しい

INSERT INTO EMPLOYEE(FIRSTNAME, EMPLOYMENTDATE) 
SELECT FIRSTNAME, ORDERDATE as EMPLOYMENTDATE 
    FROM CUSTOMER, ORDER 
WHERE CUSTOMER.id = ORDER.id 
AND ORDERDATE >= DATE '2017-01-01' 
0

サブクエリを使用すると、次のようになります。

INSERT INTO EMPLOYEE(EID, FIRSTNAME, EMPLOYMENTDATE) 
SELECT 
    ISNULL((MAX(Emp.EID)+1),1) AS EID, 
    CustOrd.FirstName, 
    CustOrd.EmploymentDate 
FROM 
    EMPLOYEE Emp, 
    (SELECT FIRSTNAME, ORDERDATE as EMPLOYMENTDATE 
    FROM CUSTOMER, ORDER 
    WHERE CUSTOMER.id = ORDER.id 
    AND ORDERDATE >= DATE '2017-01-01') CustOrd 
+0

これは、EIDがID列ではないと仮定しています。 – OnoMrBill

+0

このエラーコード "" EID "が使用されているコンテキストでは無効です。" – JasonDor

+0

こんにちはJasonDor、私は上記のコードに行った変更をご覧ください。 – OnoMrBill

関連する問題