Ich benutze sqlite3 in Python. Ich habe zwei Tabellen mit ID-Spalte in jedem. Diese ID-Spalten in den Tabellen können unterschiedliche Werte haben. Ich möchte eine neue Tabelle mit Spalten-ID erstellen, die nur die Werte enthalten kann, indem die Werte aus den ID-Spalten der ersten beiden Tabellen kombiniert werden. Ich bin in der Lage, erfolgreich Fremdschlüssel (Verbindung) mit irgendeinem der Tabelle aber nicht mit beiden zu verursachen. Ich habe auch versucht, eine Join-Ansicht aus den beiden Tabellen zu erstellen und versucht, die dritte Tabelle mit dem Join zu verknüpfen, hat aber nicht funktioniert.In sqlite3 Referenz (Fremdschlüssel) eine Spalte einer Tabelle nach Join von zwei Spalten in anderen zwei Tabellen
Antwort
Mithilfe von Triggern können Sie das Äquivalent eines Fremdschlüssels für die Vereinigung von Spalten aus zwei verschiedenen Tabellen erstellen. Sie müssen Trigger für Einfügungen und Aktualisierungen in der eingeschränkten Tabelle sowie für Aktualisierungen und Löschungen in den Referenztabellen erstellen. Wenn ich nichts verpasse, benötigst du insgesamt sechs Auslöser.
diesen Link sehen, wo der Autor ziemlich erfahren Sie, wie es zu tun, wie es geschrieben wurde, bevor SQLite Fremdschlüssel erzwingen gestartet:
http://www.sqlite.org/cvstrac/wiki?p=ForeignKeyTriggers
Zum Beispiel würde dies die INSERT-Trigger für die sein eingeschränkt Tisch, wo die eingeschränkte Tabelle ist foo
und die Referenztabellen sind bar1
und bar2`:
pragma foreign_keys=on;
create table bar1 (id integer primary key);
create table bar2 (id integer primary key);
insert into bar1 values (1);
insert into bar1 values (2);
insert into bar2 values (2);
insert into bar2 values (3);
create table foo (id integer);
CREATE TRIGGER fk_insert_foo
BEFORE INSERT ON foo
FOR EACH ROW
BEGIN
SELECT RAISE(ROLLBACK, 'insert on table foo violates foo.id '
+ 'constraint on union of bar1.id and bar2.id')
WHERE NOT (EXISTS (SELECT * FROM bar1 WHERE bar1.id=NEW.id)
OR
EXISTS (SELECT * FROM bar2 WHERE bar2.id=NEW.id));
END;
insert into foo values (1);
insert into foo values (2);
insert into foo values (3);
select * from foo;
insert into foo values (4); # <<<<<< this fails
Dank zu tun hat , Es klappt. Allerdings gibt es einen Nachteil in dieser Methode foo Tabelle zeigt keine Verknüpfung mit bar1 und bar2 –
Ich bin meistens bei Ihnen (dh kein ORM erkennt die Verbindung automatisch), aber was ein FK ist für SQLite, dort kann nur eine referenzierte (dh übergeordnete) Tabelle pro FK sein: http://www.sqlite.org/syntaxdiagrams.html#foreign-key-clause –
Ich habe eine neue Tabelle erstellt und einen Code hinzugefügt, um darin automatisch Daten einzufügen oder zu löschen wenn Einfügung oder Löschung von bar1 oder bar2 stattfindet. Dadurch wird diese Tabelle immer aktualisiert und dann mit foo verknüpft. –
- 1. Join zwei Tabellen in eine große Tabelle
- 2. Eigenname für Spalten in einer Join-Tabelle
- 3. Join mehrere Spalten in einer Tabelle zu einer einzigen Spalte in einer anderen Tabelle
- 4. Mysql Join Eine Tabelle mit mit zwei anderen Tabellen basierend auf einer Flag-Spalte
- 5. My SQL Innen von zwei Zustand je nach Wert einer anderen Spalte mit einer Tabelle Join
- 6. Sql Query Join Durchschnitt einer Spalte, wo eine andere Spalte zwischen zwei Spalten ist Werte einer anderen Tabelle
- 7. Wie eine Spalte in einer Tabelle auf Wert von einer oder zwei anderen Spalten
- 8. MySQL JOIN zwei Tabellen
- 9. INNER JOIN für zwei Spalten mit der gleichen Fremdschlüssel
- 10. Wie man eine Spalte mit Verkettung von zwei anderen Spalten in einer Tabelle aktualisiert
- 11. Join von zwei Tabellen, in denen Daten in einer Spalte übereinstimmen
- 12. Eine Spalte in zwei Spalten transponieren
- 13. Join Ergebnisse von zwei SQL-Tabellen
- 14. MySQL JOIN zwei Tabellen an zwei Stellen
- 15. SQL SELECT zwei Spalten in einer
- 16. Join zwei Tabellen, die von Zeile
- 17. MySQL Join zwei Tabellen
- 18. Zugriff Spalten von zwei verschiedenen Tabellen
- 19. SQL Join zwei Tabellen ohne Beziehungen
- 20. SQLite - Aktualisieren einer Spalte basierend auf den Werten von zwei anderen Tabellen Spalten
- 21. Einfügen in zwei MySQL-Tabellen mit Join
- 22. SQL-Abfrage eine Spalte basiert auf zwei anderen Spalten in verschiedenen Tabellen (Screenshot innen)
- 23. SQL: Verbinden von zwei Tabellen zum Auswählen mehrerer Spalten in einer anderen Tabelle
- 24. SQL JOIN zwei Tabellen
- 25. MySQL kombinieren zwei Spalten in einer Spalte
- 26. Wie zwei Tabellen mit Customize-Spalte verbinden?
- 27. Join Tabelle zweimal - auf zwei verschiedenen Spalten der gleichen Tabelle
- 28. Sortieren nach einer Spalte in einer anderen Tabelle
- 29. SQL Join Zeilen in zwei Tabellen
- 30. Join zwei Tabellen, Fehler 1054 unbekannte Spalte in 'On-Klausel'
vielleicht den python-Tag entfernen, da dies wenig damit –