Detailangabe in Abfrage

casi4711

Benutzer
Beiträge
12
Hallo allerseits, ich breche mir irgendwie gerade die Ohren an einer SQL Abfrage. Ich habe 2 in Beziehung stehenden Tabellen. Primärschlüssel jeweils unterstrichen.

1. Tabelle Bestaende:
B_ID,BIntAbk,Datum

2. Tabelle Objekte:
O_ID, B_id,Ob_F2,Ob_F20...

Innerhalb der Bestände gibt es mehrere Objekte. Aus der Objekt Tabelle sollen die Zeilen ausgesucht werden die 2 Bedingungen erfüllen.

Einmal soll Feld Ob_F2 einen String wie "xxx" enthalten, zum anderen soll Ob_F2 NULL sein. Die einfache Abfrage spuckt ca 600000 Ergebnisse aus. Insgesamt sind in der Objekttabelle rund 2mio Datensätze enthalten.

Code:
USE test;
GO
SELECT Ob_id,Ob_F2,Ob_F3,ob_f20
 
FROM M_Objekte1
WHERE
(Ob_f2 LIKE '%xxx%')
 OR
 (Ob_f2 IS NULL)
ORDER BY M_Objekte1.B_ID ASC,Ob_F2 ASC,OB_ID ASC

Nun will ich aber auch das jeweils nicht nur die B_ID angezeigt wird, sondern auch das Feld B_intAbk aus der Objekte Tabelle, hier werden mir aber einige Millionen Datensätze ausgespuckt, die O_Ids kommen nun mehrfach vor. Meine Abfrage sieht wie folgt aus:

Code:
USE test;
GO
SELECT Ob_id,Ob_F2,Ob_F3,ob_f20,B_intAbk
FROM M_Objekte1 INNER JOIN M_Bestaende ON M_Objekte1.B_ID = M_Bestaende.B_ID


AND
(Ob_f2 LIKE '%xxx%')
 OR
 (Ob_f2 IS NULL)
ORDER BY M_Objekte1.B_Id ASC,Ob_F2 ASC,OB_ID ASC

Was mache ich falsch?

Danke für Hilfe i.V.


Gruss

Chris
 
Werbung:
in deiner zweiten Abfrage, denke ich, solltest Du den zweiten Teil Deiner JOIN-Condition als WHERE-Condition nutzen, das also umschreiben.

Falls es das nicht ist: zeig mal Beispieldaten und was bei rauskommen soll.
 
Danke erst ein mal,

Du meinst das in etwa so?
Code:
SELECT Ob_id,Ob_F2,Ob_F3,ob_f20,B_intAbk
FROM M_Objekte1 INNER JOIN M_Bestaende WHERE M_Objekte1.B_ID = M_Bestaende.B_ID
 
... JOIN ON (Join-Condition) WHERE (Where-Condition)

Derzeit hast Du ja nur:

Code:
... INNER JOIN M_Bestaende ON M_Objekte1.B_ID = M_Bestaende.B_ID


AND
(Ob_f2 LIKE '%xxx%')
 OR
 (Ob_f2 IS NULL)
 
Ja ich möchte einfach nur dass in der Ausgabeliste zu der B_Id die dazugehörige B_IntAbk angezeigt wird, und zwar ohne dass plötzlich mehrfache ObIds auftreten.
 
ach das meinst du, nix hindert mich, irgendwie meine ich ich hatte das schon, nun funktionierts komischerweise
Code:
USE Archiv8;
GO
SELECT Ob_id,Ob_F2,Ob_F3,ob_f20,B_intAbk
FROM M_Objekte1 INNER JOIN M_Bestaende ON M_Objekte1.B_ID = M_Bestaende.B_ID

WHERE
(Ob_f2 LIKE '%xxx%')
 OR
 (Ob_f2 IS NULL)

ORDER BY M_Objekte1.B_Id ASC,Ob_F2 ASC,OB_ID ASC

Aber trotzdem Danke und schönen Tag noch
 
Werbung:
Ja aber ich hatte es schon, w enns auch hier rausgegangen war, nun komm ich mir bescheuert vor, obgleich ich natürlich weiss, das ein Where dahin gehört, aber egal danke trotzdem
 
Zurück
Oben