2009-07-17 4 views
1

Table1
...
LogEntryID *PrimaryKey*
Wert
THRESHOLDID - - - Link zu der entsprechenden Schwelle zu diesem Protokolleintrag angelegt wird.
...Wie schreibe ich eine SQL-Abfrage mit einer Bedingung, die eine zweite Tabelle einbezieht?

Table2
...
THRESHOLDID *PrimaryKey*
Threshold
...

Alle Felder ganze Zahlen sind.
Die "..." Dinger sind da, um zu zeigen, dass diese Tabellen viel mehr Information als nur das enthalten. Sie sind aus einem bestimmten Grund so eingerichtet, und ich kann es an dieser Stelle nicht ändern.

Ich brauche eine SQL-Anweisung schreibt jeden Datensatz von Table1 wo das Feld Wert ist in diesem speziellen Protokolldatensatz wählen kleiner als das Schwellenwert-Feld in der verknüpften Datensatz von Table2.

Ich bin neu in SQL, also weiß ich, dass dies eine grundlegende Frage ist.
Wenn mir jemand zeigen kann, wie diese SQL-Anweisung strukturiert wäre, würde es sehr geschätzt werden.

+0

Heres ein gutes SQL-Tutorial http://www.w3schools.com/SQl/default.asp –

Antwort

4
SELECT T1.* 
    FROM Table1 T1 
    JOIN Table2 T2 ON T2.ThresholdID = T1.ThresholdID 
WHERE T2.Threshold > T1.Value 
+0

Außerdem sollte angemerkt werden, dass Sie "JOIN Tabelle2 T2 ON T2.ThresholdID = T1.ThresholdID UND T2.Threshold> T1.Value" ausführen können, was nur zur Verknüpfung führt treten in den Zeilen auf, die Ihren Filterbedingungen entsprechen, anstatt alle übereinstimmenden Zeilen zu verknüpfen und dann in der WHERE zu filtern. – cfeduke

+0

Es wäre interessant, die Ausführungspläne zu vergleichen. – n8wrl

+0

@Both. Wahrscheinlich würde das den gleichen Plan geben. Ich würde vorschlagen, dass das WHERE-Konstrukt klarer ist, weil es ein Filter nach dem Grenzwert JOIN ist. – gbn

1
SELECT * FROM Table1 
JOIN Table2 
ON table1.ThresholdID = table2.ThresholdID --(assuming table 2 holds the same value to link them together) 
WHERE 
value < thresholdvalue 

A 'JOIN' verbindet zwei Tabellen basierend auf der 'ON' Klausel (die mehrteiliger sein kann, mit 'UND' und 'ODER')

Wenn Sie 3 Einträge in der Tabelle 2 haben, die gemeinsam nutzen Der Primärschlüssel von table1 (eine Eins-zu-viele-Verknüpfung) Sie erhalten 3 Zeilen in Ihrer Ergebnismenge.

für die folgenden Tabellen, zum Beispiel:

Table 1: 
Key  Value 
1  Hi 
2  Bye 

Table 2: 
Table1Key 2nd_word 
1   You 
1   fellow 
1   friend 
2   now 

diese Abfrage:

SELECT * FROM Table1 Table2 JOIN auf table1.key = table2.table1key

erhält diese Ergebnismenge :

Key Value Table1Key 2nd_word 
1  Hi  1   You 
1  Hi  1   fellow 
1  Hi  1   friend 
2  Bye  2   now 

N Anmerkung: JOIN gibt nur Ergebnisse zurück, wenn eine Übereinstimmung in der zweiten Tabelle vorhanden ist. Wenn keine Übereinstimmung gefunden wird, wird kein Ergebnis zurückgegeben. Sie können JOIN für diesen Zweck LEFT verlassen (alle Felder aus der zweiten Tabelle sind NULL).

JOINs können auch aneinandergereiht werden, das Ergebnis des vorherigen JOIN wird anstelle der ursprünglichen Tabelle verwendet.

+0

Wo Sie die auf logentryid JOIN von gekommen? Und die Where-Klausel zum "Schwellenwert"? – gbn

+0

Eine hastige SQL-Zeile, die ich so schnell wie möglich eintippte, um dann eine viel bessere Antwort geben zu können: eine Diskussion über JOINs ... was ich für viel hilfreicher hielt, als ihm einfach einen Fisch zu geben. – Jeff

+0

hastig, erste Antwort zu bekommen? ;-) – gbn

1
SELECT t1.* 
FROM dbo.Table1 t1 INNER JOIN dbo.Table2 t2 ON t1.ThresholdID = t2.ThresholdID 
WHERE t2.Threshold > t1.Value 
1

SELECT * ab Tabelle1 t1 t2 table2 on (t1.thresholdId = t2.thresholdId) wo t1.value < T2 verbinden.Schwelle;

1
SELECT t1.LogEntryID, t1.Value, t1.ThresholdID 
FROM Table1 t1 
INNER JOIN Table2 t2 ON t1.ThresholdID = t2.ThresholdID 
WHERE t1.Value < t2.threshold 
Verwandte Themen