LabVIEWForum.de
1 Zeile - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenbank & File IO (/Forum-Datenbank-File-IO)
+---- Thema: 1 Zeile (/Thread-1-Zeile)



1 Zeile - Hydrogencarbonat - 12.05.2017 07:29

Hi,

ich habe folgenden SQL-Befehl:


SELECT p.ID
FROM p
INNER JOIN s
ON s.ID = p.s
WHERE s.Spalte3=2 AND p.s= s.ID;

Mit dem Befehl bekomme ich ein Datensatz aus der Tabelle p aus der Spalte ID, wo in der Spalte 3 eine 2 steht.
Jedoch hat das so ausgelesene Datenarray 1000000 Zeilen und ich brauche nur den ersten Wert des Arrays.

Ich könnte zwar über die Array Funktionen den Wert aus der Zeile 0 des Arrays indizieren.
Aber dies ist von der Performance her sehr unpassend, da so die 1000000 Daten erst nach 50 Sekunden geladen werden.
Und ich wie gesagt nur den ersten Wert brauche.

Ich hoffe mir kann jemand weiterhelfen.

Viele Grüße
HCO


RE: 1 Zeile - Hydrogencarbonat - 12.05.2017 07:47

PS:
Es wäre gut , wenn jemand das Thema in Datenbanken verschieben könnte. Habe es versehentlich falsch gepostet.

Nochmal kurz zum Code.
Die Where-Bediungung müsste angepasst werden, hehe.

Gruß HCO


RE: 1 Zeile - Hydrogencarbonat - 12.05.2017 08:22

Mit dem Befehl geht es ohne Inner Join bei Tabelle p.

SELECT TOP 1 ID
FROM p
ORDER BY ID DESC;

Aber wie baue ich das in den anderen Code ein.
Habe schon mehrere Variationen getestet, jedoch ohne Erfolg.

SELECT TOP 1 p.ID
FROM p
ORDER BY p.ID DESC
INNER JOIN s
ON s.ID = p.s
WHERE s.Spalte3=2 AND p.s= s.ID;

SELECT TOP 1 p.ID
FROM p
INNER JOIN s
ORDER BY p.ID DESC
ON s.ID = p.s
WHERE s.Spalte3=2 AND p.s= s.ID;

SELECT TOP 1 p.ID
FROM p
INNER JOIN s
ON s.ID = p.s
ORDER BY p.ID DESC
WHERE s.Spalte3=2 AND p.s= s.ID;

SELECT TOP 1 p.ID
FROM p
INNER JOIN s
ON s.ID = p.s
WHERE s.Spalte3=2 AND p.s= s.ID
ORDER BY p.ID DESC;

Gruß HCO


RE: 1 Zeile - jg - 12.05.2017 08:52

Welcher DB-Engine?
TOP 1 sollte bei MS-SQL eigentlich immer funktionieren.

Gruß, Jens


RE: 1 Zeile - Hydrogencarbonat - 12.05.2017 09:10

SQL-Server/ Microsoft Acces Database

Der Befehl funktioniert auch.
SELECT TOP 1 ID
FROM p
ORDER BY ID DESC;


Aber ich muss diesen ja in meinen Inner Join- Befehl einfügen, damit ich nur die eine Zeile der p.ID -Spalte bekomme und nicht alle mit der Spalte 1
Ich weiss nicht an welcher Stelle bzw. wie ich den Befehl umgestalten muss.

SELECT TOP 1 p.ID
FROM p
INNER JOIN s
ON s.ID = p.s
WHERE s.ID=2 AND p.s= s.ID
ORDER BY p.ID DESC;

Gruß HCO


RE: 1 Zeile - Freddy - 12.05.2017 10:45

Hallo Nils,
ich will es hier auch noch für alle schreiben.

Ab SQL 2012 gibt es die Fetch Anweisung.

SELECT p.ID
FROM p
INNER JOIN s
ON s.ID = p.s
WHERE s.Spalte3=2 AND p.s= s.ID
ORDER BY p.ID DESC
OFFSET 0 ROWS
FETCH NEXT 1 ROWS ONLY;

Damit wird nur ein Datensatz gesucht.
Info von Microsoft


RE: 1 Zeile - jg - 12.05.2017 12:07

Also:
Den zweiten Teil der Where-Clause kannst du dir sparen, das wird doch schon über den Inner Join erledigt.

Und ich habe es gerade getestet, eine Abfrage der Art

SELECT TOP 1 p.ID
FROM p
INNER JOIN s
ON s.ID = p.s
WHERE s.Spalte3=2
ORDER BY p.ID DESC;

liefert mir max. 1 p.ID zurück.

Gruß, Jens


RE: 1 Zeile - Hydrogencarbonat - 12.05.2017 12:09

Hi Friedhold,

dein Code funktioniert leider nicht.
Da durch "Order By" nicht die besagte Position der ersten Zeile gefunden werden kann.
Einfach die Zeile "Order By" weglassen und nach Select "Top 1" einfügen.
Anstatt 50 Sekunden sind es nun 0,556s und ich bekomme genau die erste Zeile :=).


SELECT TOP 1 p.ID
FROM p
INNER JOIN s
ON s.ID = p.s
WHERE s.ID=2 AND p.s= s.ID;

Gruß HCO
Ok,
die Lösung von Jens geht auch Smile.
Die Ausführung dauert aber 2 Sekunden länger .

Recht herzlichen Dank an alle für die Hilfe.

Beste Grüße Smile


RE: 1 Zeile - jg - 12.05.2017 12:27

(12.05.2017 12:09 )Hydrogencarbonat schrieb:  Ok,
die Lösung von Jens geht auch Smile.
Die Ausführung dauert aber 2 Sekunden länger .

Recht herzlichen Dank an alle für die Hilfe.

Beste Grüße Smile
Ohne Order by kannst du aber nicht sicher sein, dass du immer dieselbe ID / Zeile zurückbekommst.

Gruß, Jens

EDIT: Falls nötig, leg einen Index auf die Spalte, das hilft by Order-Queries