2012-10-29 5 views
6

Desidero inserire alcuni valori in una tabella (elemento1) da una tabella (elemento2) e una data che non si trova in quella tabella item2.Inserimento di Sql errato in istruzione utilizzando l'istruzione select

Come si scrive un inserto SQL in istruzione utilizzando l'istruzione select per ottenere ciò?

esempio:

INSERT into item1(date, name, qty) 
values(datevalue, select col1, col2 from item2); 

Questo non funziona. Cosa devo fare per risolverlo?

insert into daily_stock(date, product_id, name, weight, qty, free_issues, sales_price, 
         purchased_price, category, last_purchased_date) 

    select 
     **'"+today+"'**, 
     productId, name, weight, newQty, freeIssues, NewSalesPrice, 
     NewPurchasePrice, category, datePurchased 
    from product 

Sto usando java e oggi è una variabile stringa, i dati non si stanno ancora inserendo, che cosa è sbagliato?

+0

http://stackoverflow.com/questions/224732/sql-update-from-one-table-to-another-based-on-a-id-match –

risposta

7

ci sei quasi: basta usare la variazione SELECT per INSERT instread di VALUES, e comprendono i dati lì come una costante:

insert into item1(date,name,qty) 
select <datevalue>, col1, col2 from item2; 

Se la data viene da un altro tavolo, si può fare questo:

insert into item1(date,name,qty) 
select d.dcol1, i2.col1, i2.col2 
from item2 i2 inner join table_containing_date_col d 
on <some join criteria> 

EDIT: è necessario assicurarsi che i tipi di dati abbinare cioè il vostro deve essere analizzabili ad una data se siete savign a un campo data (che si sono, si spera!). Non dai dettagli della vostra base di dati ma sarebbe qualcosa di simile per SQL Server

cast('your date in yyyymmdd format' as datetime) 

(yyyymmdd funziona sempre in quanto è formato ISO riconoscibile)

o meglio ancora CONVERT

Per MySql hai STR_TO_DATE, per Oracle TO_DATE eccetera.

+0

divertente ... non ho mai mai * * codifica la parola chiave 'inner', poiché è il tipo di join predefinito in ogni database e tutti lo sanno. – Bohemian

1

uso INSERT INTO...SELECT dichiarazione

INSERT INTO item1 (date, name, qty) 
SELECT 'value here' as datevalue, col1, col2 
FROM item2 
0

In assenza di uno specifico server SQL/tipo che si sta utilizzando, in T-SQL questo può essere fatto in questo modo:

INSERT INTO Table1 
SELECT '29/01/2012', T2.Column1, T2.Column2 FROM Table2 T2 
0

Vi sono vicino.

INSERT into ITEM1 (date, name, qty) 
values (datevalue, (SELECT col1, col2 FROM item2));