2016-10-06 2 views
0

Ich möchte in SQL-Feld suchen, die nicht ein Teil ofjoined ist, sondern eine externe Tabelle, die einige Relevanz mit der ID der einen der verbundenen Tabellen hat.Suche durch SQL-Feld

hier ist meine Frage, wo ich einige Suche versuche

SELECT sdate,stime (select catid from 
users where id = OM.id) as catid 
FROM 
table2 AS OM 
INNER JOIN table2 a ON a.pid = OM.pid 
where 1=1 
AND (select catid from 
users where id = OM.id) = '120' 

das ist, wo ich einen Fehler

UND (wählen catid von Benutzer wo id = OM.id) = 'bin immer 120 '

[Err] 42000 - [SQL Server]Incorrect syntax near the keyword 'AND'. 
42000 - [SQL Server]Incorrect syntax near '='. 
+0

Bevor Sie eine Abfrage durchführen können, müssen Sie zunächst die Benutzertabelle mit der OM-Tabelle verknüpfen. – PrestonM

+0

Können Sie uns bitte die Struktur der Tabellen und einige Beispieldaten geben. Es ist viel einfacher, Ihre Frage zu beantworten, wenn wir mit korrekten Daten arbeiten. – Linkan

+0

Die Struktur der Daten besteht darin, dass zwei 'table1' und' table2' durch ihre eigene 'PID' verknüpft werden können, während das eine ID Feld nur'exisant' in der Benutzertabelle –

Antwort

0

Wie wäre es mit einem Komma nach dem Stiel?

ändern

SELECT sdate, stime (select catid from 
users where id = OM.id) as catid 
FROM ... 

zu

SELECT sdate, stime, (select catid from 
users where id = OM.id) as catid 
FROM ... 
+0

das war ein Miss, ich fügte hinzu, aber das ist nicht das Problem, das ich habe –

+0

Ich bin immer noch bei einem Loos, der versucht zu verstehen, warum man nicht "inner join" verwenden will. – ajeh

0

Es ist ein logischer hier Fehler. Sie erhalten möglicherweise mehr als 1 Zeile in Ihrer Unterabfrage. Warum verbinden Sie sich nicht einfach mit Benutzern dieser seltsamen Unterabfrage?

SELECT sdate 
    , stime 
    , u.catid 
FROM 
table2 AS OM 
INNER JOIN table2 a ON a.pid = OM.pid 
inner join user u on u.id = OM.id 
where u.catid = '120' 
+0

die select-Anweisung, die in Klammern ist, wird es mir nur 1 Datensatz geben, weil id übereinstimmen, das Ding, das ich in Where-Klausel brauche, aber wenn Join, gibt es mir Ergebnisse für leere IDs, die ist falsch –

+1

Wie kann es Ihnen Ergebnisse geben wo ID ist leer ??? Es kann nur Zeilen mit dem Wert von ID 120 zurückgeben. Vielleicht haben Sie Ihre Abfrage so stark vereinfacht, dass Sie das eigentliche Problem ausgeblendet haben. Der logische Vergleich einer Unterabfrage mit einem Skalarwert ist nicht sinnvoll, da die Unterabfrage mehr als 1 Zeile zurückgeben kann. Sie wissen, dass dies nicht auf den Daten basiert, der Parser jedoch nicht –