RISOLTO [SQL] Modificare ordine delle colonne con vincolo

Stato
Discussione chiusa ad ulteriori risposte.

sare1234

Utente Attivo
262
3
Salve come posso modificare l'ordine delle colonne se voglio che il nome venga scritto prima dell'id tramite un vincolo e non operando da query in questo modo:

SQL:
SELECT Name,Id FROM NAMES;
?grazie

SQL:
/* Create a table called NAMES */
CREATE TABLE NAMES(
    Id integer PRIMARY KEY,
    Name text
  
    );

/* Create few records in this table */
INSERT INTO NAMES VALUES(1,'Tom');
INSERT INTO NAMES VALUES(2,'Lucy');
INSERT INTO NAMES VALUES(3,'Frank');
INSERT INTO NAMES VALUES(4,'Jane');
INSERT INTO NAMES VALUES(5,'Robert');
COMMIT;

/* Display all the records from the table */
SELECT * FROM NAMES;
 

Andretti60

Utente Èlite
6,440
5,091
Quale sarebbe questo vincolo?
Se vuoi stampare una lista non hai scelta, devi usare un SELECT usando tutti i WHERE che vuoi (e affini tipo sorting)
 

sare1234

Utente Attivo
262
3
Quale sarebbe questo vincolo?
Se vuoi stampare una lista non hai scelta, devi usare un SELECT usando tutti i WHERE che vuoi (e affini tipo sorting)
ma in realtà devo rappresentare il seguente vincolo, penso tipo con check, il id è successivo al nome. Ho provato così:
SQL:
ALTER TABLE NAMES
  ADD CONTRAINT IdSuccessivoNome CHECK (Id,Name);
Ma non va
 

Andretti60

Utente Èlite
6,440
5,091
Continuo a non capire, vuoi modificare la tavola nel database o vuoi stampare i valori in modo diverso da come sono memorizzati?
 

Dumah Brazorf

Utente cAttivo
Utente Èlite
7,621
3,547
Boh io non capisco.
Non è che la chiave deve essere il primo campo della tabella eh. Se la vuoi creare prima campo nome e poi campo id mica si incaxxa.
 
  • Mi piace
Reazioni: Andretti60

sare1234

Utente Attivo
262
3
Continuo a non capire, vuoi modificare la tavola nel database o vuoi stampare i valori in modo diverso da come sono memorizzati?
eh scusa...nella definizione della tabella devo inserire il vincolo che "il nome è successivo all'id"
Post unito automaticamente:

Boh io non capisco.
Non è che la chiave deve essere il primo campo della tabella eh. Se la vuoi creare prima campo nome e poi campo id mica si incaxxa.
si lo so ma l'esercizio mi dice di definire nella definizione della tabella il vincolo
 

Andretti60

Utente Èlite
6,440
5,091
Ma perché non ci dai il testo dell’esercizio? Altrimenti facciamo a’nottata cercando di capire. Perché io ancora non ho idea di quello che devi fare.
 

sare1234

Utente Attivo
262
3
Ma perché non ci dai il testo dell’esercizio? Altrimenti facciamo a’nottata cercando di capire. Perché io ancora non ho idea di quello che devi fare.
si allora l'esercizio è diverso da quello che ho indicato all'inizio, volevo renderlo più semplice per capirlo, comunque ho tale schema logico:

AppleScript:
ArticoloFisico(Nserie, dataProduzione, Produttore, DataAcquisizione, codArticoloFisico)

quindi in SQL:

SQL:
CREATE TABLE ArticoloFisico
(
   Nserie    VARCHAR(20) NOT NULL,
   dataProduzione Date,
   Produttore  VARCHAR(50) NOT NULL,
   DataAcquisizione Date,
   codarticoloFisico  VARCHAR(10) PRIMARY KEY,
)

il vincolo da indicare in questa tabella è: la data "DataAcquisizione" è successiva alla "dataProduzione".
 

Andretti60

Utente Èlite
6,440
5,091
Ma quello è completamente diverso! Il vincolo non è nell’ordine dei campi della tabella, bensì nei valori di alcuni campi. In questo caso, la data di acquisto deve seguire quella di produzione.
Dai una occhiata Qui
 
  • Mi piace
Reazioni: Moffetta88

sare1234

Utente Attivo
262
3
Ma quello è completamente diverso! Il vincolo non è nell’ordine dei campi della tabella, bensì nei valori di alcuni campi. In questo caso, la data di acquisto deve seguire quella di produzione.
Dai una occhiata Qui
okay avevo capito di indicare tipo così

Codice:
CREATE TABLE ArticoloFisico
(
   Nserie    VARCHAR(20) NOT NULL,
   dataProduzione Date,
   Produttore  VARCHAR(50) NOT NULL,
   DataAcquisizione Date CHECK (espressione),
   codarticoloFisico  VARCHAR(10) PRIMARY KEY,
)

oppure

Codice:
CREATE TABLE ArticoloFisico
(
   Nserie    VARCHAR(20) NOT NULL,
   dataProduzione Date,
   Produttore  VARCHAR(50) NOT NULL,
   DataAcquisizione Date,
   codarticoloFisico  VARCHAR(10) PRIMARY KEY,

   CONSTRAINT VINCOLO1 CHECK (espressione);
)

ma il mio problema è che non so cosa mettere in espressione
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed

sare1234

Utente Attivo
262
3
Ok il non cercare però almeno guardare quello che è l'esempio linkato da Andretti...
Guarda su MySQL https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html

Ti sei quindi persa una parte:
SQL:
[CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]

E su altri siti trovi praticamente esempi già fatti (questo è con una alter table) https://www.codegrepper.com/code-ex...int+to+check+if+date+greater+than+todays+date
ma io devo usare sql non mysql e non ho capito cosa mi sono persa, non va bene se scrivo cosi:
SQL:
CREATE TABLE ArticoloFisico
(
   Nserie    VARCHAR(20) NOT NULL,
   dataProduzione Date,
   Produttore  VARCHAR(50) NOT NULL,
   DataAcquisizione Date,
   codarticoloFisico  VARCHAR(10) PRIMARY KEY,
   CONSTRAINT vincolo1 CHECK (dataAcquisizione > dataProduzione)
)

?
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Si, questo è corretto. Il solo frammento che citavi nel post precedente però no.
Comunque fai prima a scriverlo ed eseguirlo, così verifichi se è ciò che ti aspetti.
 
  • Mi piace
Reazioni: sare1234
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili