Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi warum funktioniert dieses update nicht? (https://www.delphipraxis.net/101381-warum-funktioniert-dieses-update-nicht.html)

webcss 12. Okt 2007 07:59

Datenbank: Firebird • Version: 2.0.3 • Zugriff über: ibexpert

warum funktioniert dieses update nicht?
 
moin DPler,

folgendes update liefert nicht das gewünschte ergebnis:
SQL-Code:
update adressen set
KundenRef = (select kunden.Id from kunden where kunden.adresseRef = adressen.ID)
und ich raff's net wieso?

HILFE!

DeddyH 12. Okt 2007 08:01

Re: warum funktioniert dieses update nicht?
 
Und so?
SQL-Code:
update adressen set
KundenRef = (select kunden.Id from kunden,adressen where kunden.adresseRef = adressen.ID)

mkinzler 12. Okt 2007 08:04

Re: warum funktioniert dieses update nicht?
 
Oder
SQL-Code:
update adressen a set
KundenRef = (select kunden.Id from kunden where kunden.adresseRef = a.ID)

webcss 12. Okt 2007 08:11

Re: warum funktioniert dieses update nicht?
 
Zitat:

Zitat von DeddyH
Und so?
SQL-Code:
update adressen set
KundenRef = (select kunden.Id from kunden,adressen where kunden.adresseRef = adressen.ID)

multiple rows in singleton select :(

Zitat:

Zitat von mkinzler
update adressen a set
KundenRef = (select kunden.Id from kunden where kunden.adresseRef = a.ID)

das ist dasselbe was ich mache, zumindest im ergebnis...

DeddyH 12. Okt 2007 08:19

Re: warum funktioniert dieses update nicht?
 
Noch ein Versuch aus dem Kopf:
SQL-Code:
UPDATE Adressen A
SET KundenRef =
(SELECT kunden.Id FROM kunden
 JOIN Adressen B ON B.adressenId = kunden.adresseRef)
WHERE A.Id = B.Id

mirage228 12. Okt 2007 08:20

Re: warum funktioniert dieses update nicht?
 
Zitat:

Zitat von webcss
Zitat:

Zitat von DeddyH
Und so?
SQL-Code:
update adressen set
KundenRef = (select kunden.Id from kunden,adressen where kunden.adresseRef = adressen.ID)

multiple rows in singleton select :(

Hört sich zumindest so an, als ob das Sub-Select mehrere Ergebnisse liefert, wo nur eines erlaubt wäre.
Was ist wenn du ein "LIMIT 1" in die Select-Anweisung reinschreibst?

mfG
mirage228

DeddyH 12. Okt 2007 08:21

Re: warum funktioniert dieses update nicht?
 
Firebird kennt kein "LIMIT" (leider weiß ich jetzt nicht aus dem Kopf, wie dort die Entsprechung lautet).

mkinzler 12. Okt 2007 08:29

Re: warum funktioniert dieses update nicht?
 
Zitat:

Firebird kennt kein "LIMIT" (leider weiß ich jetzt nicht aus dem Kopf, wie dort die Entsprechung lautet).
SQL-Code:
select first 1 ...
bzw. Interbase Syntax
SQL-Code:
select ... rows 1
oder halt mit distinct

DeddyH 12. Okt 2007 08:30

Re: warum funktioniert dieses update nicht?
 
Thx, wieder was gelernt.

webcss 12. Okt 2007 08:45

Re: warum funktioniert dieses update nicht?
 
Zitat:

Zitat von DeddyH
Noch ein Versuch aus dem Kopf:
SQL-Code:
UPDATE Adressen A
SET KundenRef =
(SELECT kunden.Id FROM kunden
 JOIN Adressen B ON B.adressenId = kunden.adresseRef)
WHERE A.Id = B.Id

geht nicht da man sich in einem "äußeren" where-clause auf spalten eines SubSelects beziehen kann. Trotzdem Danke.

DeddyH 12. Okt 2007 09:14

Re: warum funktioniert dieses update nicht?
 
Dann setz doch die schließende Klammer ganz an den Schluss.

webcss 12. Okt 2007 09:41

Re: warum funktioniert dieses update nicht?
 
Zitat:

Zitat von DeddyH
Dann setz doch die schließende Klammer ganz an den Schluss.

netter trick, aber: multiple rows in singleton select

mkinzler 12. Okt 2007 09:46

Re: warum funktioniert dieses update nicht?
 
Versuch es mal ohne JOIN:

SQL-Code:
update adressen a set
KundenRef = (select distinct kunden.Id from kunden where kunden.adresseRef = a.ID)

DeddyH 12. Okt 2007 09:48

Re: warum funktioniert dieses update nicht?
 
So langsam wird es Zeit, Deine Tabellenstruktur mal bekannt zu machen (vor allem die Relation).

Flocke 12. Okt 2007 09:49

Re: warum funktioniert dieses update nicht?
 
Zitat:

Zitat von webcss
netter trick, aber: multiple rows in singleton select

Dann gibt dein Datenmodell eben nicht das her, was du willst: es gibt offensichtlich mehrere Kunden mit derselben Adress-Referenz. Finde doch hiermit mal raus, wo's hakt (aus dem Kopf):
SQL-Code:
select a.id, count(k.Id)
from Adressen a
left join Kunden k on k.adresseRef = a.id
group by a.id
having count(k.Id) > 1

webcss 12. Okt 2007 10:04

Re: warum funktioniert dieses update nicht?
 
Zitat:

Zitat von Flocke
Zitat:

Zitat von webcss
netter trick, aber: multiple rows in singleton select

Dann gibt dein Datenmodell eben nicht das her, was du willst: es gibt offensichtlich mehrere Kunden mit derselben Adress-Referenz. Finde doch hiermit mal raus, wo's hakt (aus dem Kopf):
SQL-Code:
select a.id, count(k.Id)
from Adressen a
left join Kunden k on k.adresseRef = a.id
group by a.id
having count(k.Id) > 1

Doch, gibt es!

Dein SQL ist korrekt, und meine Tabellen haben keine Dups. Hab jetzt einfach mal ein älteres backup eingespielt (Ist noch DevPhase :) ) und zäume das Pferd jetzt von hinten auf. Irgendwo hab ich bestimmt einen Fehler gemacht, hab aber keine Lust weiterhin danach zu suchen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz