INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

1 Zeile



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

12.05.2017, 07:29
Beitrag #1

Hydrogencarbonat Offline
LVF-User
**


Beiträge: 187
Registriert seit: Apr 2014

2013,2014
2014
DE

XXXXX
Deutschland
1 Zeile
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
12.05.2017, 07:47
Beitrag #2

Hydrogencarbonat Offline
LVF-User
**


Beiträge: 187
Registriert seit: Apr 2014

2013,2014
2014
DE

XXXXX
Deutschland
RE: 1 Zeile
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.05.2017, 08:22
Beitrag #3

Hydrogencarbonat Offline
LVF-User
**


Beiträge: 187
Registriert seit: Apr 2014

2013,2014
2014
DE

XXXXX
Deutschland
RE: 1 Zeile
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.05.2017, 08:52
Beitrag #4

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: 1 Zeile
Welcher DB-Engine?
TOP 1 sollte bei MS-SQL eigentlich immer funktionieren.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.05.2017, 09:10
Beitrag #5

Hydrogencarbonat Offline
LVF-User
**


Beiträge: 187
Registriert seit: Apr 2014

2013,2014
2014
DE

XXXXX
Deutschland
RE: 1 Zeile
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.05.2017, 10:45 (Dieser Beitrag wurde zuletzt bearbeitet: 12.05.2017 10:47 von Freddy.)
Beitrag #6

Freddy Offline
Oldtimer
****


Beiträge: 729
Registriert seit: Aug 2008

2019, 2020, 2021
1996
DE

76275
Deutschland
RE: 1 Zeile
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

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.05.2017, 12:07
Beitrag #7

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: 1 Zeile
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

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.05.2017, 12:09 (Dieser Beitrag wurde zuletzt bearbeitet: 12.05.2017 12:17 von Hydrogencarbonat.)
Beitrag #8

Hydrogencarbonat Offline
LVF-User
**


Beiträge: 187
Registriert seit: Apr 2014

2013,2014
2014
DE

XXXXX
Deutschland
RE: 1 Zeile

Akzeptierte Lösung

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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.05.2017, 12:27 (Dieser Beitrag wurde zuletzt bearbeitet: 12.05.2017 12:39 von jg.)
Beitrag #9

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: 1 Zeile
(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

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Zeile sortieren megalopo 5 5.938 22.06.2012 05:52
Letzter Beitrag: NWOmason
  Einzelne Zeile aus .txt auslesen pyrates 7 10.217 24.02.2010 08:28
Letzter Beitrag: SeBa
  tdm-Datei Zeile für zeile auslesen RookieBerlin 5 8.724 24.06.2009 20:32
Letzter Beitrag: schrotti
  Zeile in Datei einfügen Marco 1 4.303 23.01.2006 10:10
Letzter Beitrag: GrauerStar

Gehe zu: