mit Tupeln sql-Klausel
Gegeben eine Datenbank wie diese:
BEGIN TRANSACTION;
CREATE TABLE aTable (
a STRING,
b STRING);
INSERT INTO aTable VALUES('one','two');
INSERT INTO aTable VALUES('one','three');
CREATE TABLE anotherTable (
a STRING,
b STRING);
INSERT INTO anotherTable VALUES('one','three');
INSERT INTO anotherTable VALUES('two','three');
COMMIT;
Würde ich gerne tun, etwas entlang der Linien von
SELECT a,b FROM aTable
WHERE (aTable.a,aTable.b) IN
(SELECT anotherTable.a,anotherTable.b FROM anotherTable);
Um die Antwort zu bekommen 'ein','drei', aber ich bin immer "in der Nähe ",": syntax error"
Ist das möglich in der Eigengeschmack von SQL? (Ich verwende sqlite)
Bin ich ein grober konzeptioneller Fehler? Oder was?
InformationsquelleAutor mr calendar | 2009-09-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
dein code funktioniert, wenn Sie es in PostgreSQL oder Oracle. auf MS SQL wird nicht unterstützt
verwenden:
[BEARBEITEN]
sans die Angabe des Vorsatzes:
es ist etwas lahm, für mehr als ein Jahrzehnt, MS-SQL-immer noch keine erste-Klasse-Unterstützung für Tupel. IM Tupel konstruieren ist viel lesbarer als seine Analog EXISTIERT zu konstruieren. btw, JOIN funktioniert auch (tster code), aber wenn Sie etwas brauchen mehr flexible und zukunftssichere Nutzung BESTEHT.
[BEARBEITEN]
sprechen von SQLite, ich bin einmal mit ihm vor kurzem. ja, IN Tupeln funktioniert nicht
Auch, wenn es funktioniert hat, in sqlite, würde ich empfehlen, es nicht zu tun. Dies wird zwangsläufig zu verwirren zukünftige maintainer des Codes. (HINWEIS: Sie sind die Zukunft Betreuers, so ist es Sie, werden verwirrt)
Ich kann nicht erkennen, die Quelle der Verwirrung
"es ist etwas lahm, für mehr als ein Jahrzehnt, MS-SQL-immer noch keine erste-Klasse-Unterstützung für Tupel. IM Tupel konstruieren ist viel lesbarer als seine Analog EXISTIERT zu konstruieren." Yep, ich auch hier gelandet, weil eine solche Begrenzung von MS SQL. Für alle Menschen, die sich darum kümmert, bitte votet für ihn hier -- Hinzufügen von Unterstützung für ANSI-standard-Reihe Wert-Konstruktoren connect.microsoft.com/SQLServer/feedback/details/299231/...
InformationsquelleAutor Michael Buen
können Sie eine Verknüpfung:
Ja, Sie versuchen zu schreiben in einer Weise, die Sie verstehen, aber das problem ist gelöst, viel mehr natürlich mit set-Theorie, die Grundlage von SQL. Eine sehr häufige Verwendung von SQL zum join von zwei Tabellen zu Holen Sie sich die Kreuzung von Ihnen, was Sie zu tun versuchen.
MITMACHEN können haben ein problem, wenn anotherTable über doppelte Werte verfügt, BESTEHT mehr Flexibilität/Zukunftssicherheit als seine JOIN-cousin: stackoverflow.com/questions/1001543/...
in diesem Artikel erklären-set-Tests(IN vs BEITRETEN vs-EXITS) sehr schön, einschließlich der Logik-und Ausführungsplan auf nicht eindeutige Werte, und nicht-indizierte Werte: explainextended.com/2009/06/16/in-vs-join-vs-exists
Schließt sich auch nicht mit LÖSCHEN.
InformationsquelleAutor tster
Andere alternative ist die Verwendung von-Verkettung, um Ihren 2-Tupel zu einem einzigen Feld :
...nur bewusst sein, dass schlechte Dinge passieren können, wenn a oder b enthalten, die das Trennzeichen '-'
InformationsquelleAutor Snorex