Come faccio a creare un SQL DELETE per eliminare le righe in una tabella 3?

Questa è la struttura di un database SQLite:
Come faccio a creare un SQL DELETE per eliminare le righe in una tabella 3?

Sto cercando di eliminare TUTTI i OrderData che appartiene a una selezione di OrderInfo.Cust_ID che appartiene a un particolare CustData.Cust_ID. Questo è il mio istruzione DELETE, che mi dà l’errore: “nessuna colonna: CustData.Customer_ID”

DELETE FROM OrderData
   WHERE CustData.Customer_ID = OrderInfo.Cust_ID 
   AND OrderData.Order_ID = OrderInfo.Order_ID 
   AND CustData.Bus_Name = 'Albertsons' 

So che SQLite NON supporta Unisce in un’istruzione DELETE, così mi sono lasciato con CUI e ANDs; qualcuno può dirmi il modo corretto di questa parola?

Si potrebbe provare una sottoquery con una clausola.

OriginaleL’autore SpokaneDude | 2012-06-01

3 Replies
  1. 11

    Si potrebbe provare una sottoquery con una clausola. Qualcosa come:

    DELETE FROM OrderData WHERE OrderData.Order_ID IN
    (SELECT OrderInfo.Order_ID 
    FROM OrderInfo
    JOIN CustData on OrderData.Order_ID = OrderInfo.Order_ID 
    WHERE CustData.Bus_Name = 'Albertsons')

    per eseguire la query prima di eliminare solo fare questo: (restituisce tutte le righe che sarebbero cancellati dalla query di eliminazione)

    SELECT * FROM OrderData WHERE OrderData.Order_ID IN
    (SELECT OrderInfo.Order_ID 
    FROM OrderInfo
    JOIN CustData on OrderData.Order_ID = OrderInfo.Order_ID 
    WHERE CustData.Bus_Name = 'Albertsons')
    Paolo: io non ho mai usato una sottoquery con una clausola (SQLite documenti non pensarci)… quindi mi chiedevo se si poteva prendere un momento e compilare quello che va in “some_table” e “some_other_table”? Inoltre, un buon tutorial su sottoquery (rivolto a SQLite) sarebbe apprezzato (non voglio andare via da questa non sapendo quello che sto facendo!) 😀
    Ho aggiornato la risposta. Penso che in realtà è molto simile a quello che davids postato… ho anche aggiunto una query di prova per l’uso prima di provare l’effettiva eliminazione. Dovrebbe funzionare perché l’ELIMINAZIONE in realtà non eseguire un JOIN. Il JOIN è isolato nella sottoquery che restituisce tutti gli Id NELLA clausola di query di livello superiore.
    Oops. Aveva un problema nella query. Modificato la risposta. Si prega di riprovare.
    Questo è a quanto pare… ma non ho nulla in OrderData tavolo… grazie per il vostro aiuto… io ma alcuni dati nella tabella e vedere come andrà a finire… 😀 SELECT * FROM OrderData DOVE OrderData.Order_ID IN (SELECT OrderInfo.Order_ID DA OrderInfo PARTECIPARE CustData su OrderData.Order_ID = OrderInfo.Order_ID DOVE CustData.Bus_Name = ‘Prager Software’)
    Un altro oops. Provare di nuovo.

    OriginaleL’autore Paul Sasik

  2. 1

    Non si può.

    SQLite (sotto v3.6.19) non supporta i vincoli di chiave esterna

    ma è possibile utilizzare triggers per esempio
    Controllare questo che vi aiuterà.

    Se si dispone di v 3.6.19, è già in grado di supportare vincoli esterna con UPDATE o DELETE CASCADE
    Leggi SQLite Chiave Esterna Di Supporto

    EDIT:

    O come ha scritto @Paolo Sasik

    OriginaleL’autore Simon Dorociak

  3. 0

    provare

    DELETE FROM OrderData
    WHERE OrderData.Order_ID IN (SELECT oi.Order_ID FROM OrderInfo oi 
      INNER JOIN CustData cd ON oi.Cust_id = cd.Customer_Id WHERE cd.Bus_Name='Albertsons')
    Questo è SQLite… non si può usare Join con ELIMINARE in SQLite… grazie comunque
    Non ho familiarità con SQLite, ma il join è una sottoquery, fa si che non fanno la differenza?
    Il mio commento è fondamentalmente lo stesso come @Paolo Sasik, basta con le colonne e tabelle.

    OriginaleL’autore davids

Lascia un commento