sql >> Database teknologi >  >> RDS >> Oracle

Opret en indlejret tabel, og indsæt kun data i den indre tabel

Du kan bruge COALESCE( salary_history, salary_list() ) MULTISET UNION ALL salary_list( :your_new_value ) for at tilføje den nye værdi til den gamle liste (eller oprette en ny liste, hvis den ikke findes).

Oracle 11g R2 Schema Setup :

CREATE OR REPLACE TYPE salary_list AS TABLE OF NUMBER;
/

CREATE TABLE employees(
  id             NUMBER,
  salary_history salary_list
) NESTED TABLE salary_history STORE AS salary_history_tab
/

INSERT INTO employees VALUES ( 1, NULL )
/
 

Forespørgsel 1 :

UPDATE employees
SET   salary_history = COALESCE( salary_history, salary_list() )
                       MULTISET UNION ALL salary_list( 500 )
WHERE id = 1

SELECT * FROM employees
 

Resultater :

| ID | SALARY_HISTORY | |----|----------------| | 1 | 500 |

Forespørgsel 2 :

UPDATE employees
SET   salary_history = COALESCE( salary_history, salary_list() )
                       MULTISET UNION ALL salary_list( 700 )
WHERE id = 1

SELECT * FROM employees
 

Resultater :

| ID | SALARY_HISTORY | |----|----------------| | 1 | 500,700 |

Forespørgsel 3 :

UPDATE employees
SET   salary_history = COALESCE( salary_history, salary_list() )
                       MULTISET UNION ALL salary_list( 500 )
WHERE id = 1

SELECT * FROM employees
 

Resultater :

| ID | SALARY_HISTORY | |----|----------------| | 1 | 500,700,500 |

  1. Skal jeg oprette et nyt felt i tabellen eller bare vælge MAX for den anden tabel

  2. mysql cross join, men uden duplikeret par?

  3. Vis alle databasenavne

  4. PHP-Form validering og indsættelse ved hjælp af MySql