Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst MySQL - dynamisches between aus Tabelle erstellen

Mitglied: Maik87

Maik87 (Level 2) - Jetzt verbinden

03.12.2011, aktualisiert 17:21 Uhr, 3139 Aufrufe, 11 Kommentare

Hallo Forum,

ich habe folgendes vor:
Ich habe eine Tabelle "TabBetw". In der sind Zahlenbereiche in den Spalten Von und Bis eingetragen.

TabBetw
Von Bis
1 4
10 50
100 102


Jetzt möchte ich aus einer weiteren Tabelle "Daten" alle Zeilen auslesen, die in den og. Zahlenbereichen sind:
Mein (nicht funktionierender) Denkansatz ist wie folgt:

Select * from daten where id between (select a.von from TabBetwe a) and (select b.bis from TabBetwe b)

Das funktioniert jetzt aber nur für die erste Zeile. Wie erreiche ich, dass alle Zeilen dabei beachtet werden?


Ich hoffe, ihr versteht was ich meine.


Danke schön bereits im Voraus!!
Mitglied: nxclass
03.12.2011 um 15:01 Uhr
versuch das mal:
01.
SELECT b.*, d.* 
02.
FROM `betw` b 
03.
    LEFT JOIN `dat` d ON ( d.`id` BETWEEN b.`von` AND b.`bis` )
Bitte warten ..
Mitglied: Maik87
03.12.2011 um 17:38 Uhr
Super!! Danke!!

Wenn ich das b.* weglasse, läuft es so wie es soll!
Kannst mir bitte noch erklären, wie der Code funktioniert?
Bitte warten ..
Mitglied: nxclass
05.12.2011 um 00:16 Uhr
Einfach: die Daten der Tabellen 'betw* und *dat* werden verknüpft - hinter ON steht dann nur Wie diese verbunden sind.
Bitte warten ..
Mitglied: Maik87
05.12.2011 um 17:05 Uhr
Ich verzweifel mal wieder an der Steigerung:

01.
> SELECT t.ID2, count(*) 
02.
> FROM tabelle t 
03.
> WHERE t.ID 
04.
> NOT IN(SELECT  d.ID 
05.
> FROM `betw` b 
06.
>     LEFT JOIN `dat` d ON ( d.`id` BETWEEN b.`von` AND b.`bis` )) 
07.
> GROUP BY t.ID2 
08.
> 

Funktioniert ja noch...
Aus Tabelle t werden die ID2 und die jeweiligen Anzahlen ausgegeben, die nicht durch den "Between-Join" ausgegrenzt wurden.

Wie schaffe ich es jetzt aber, diese gezählten Daten per Update in eine weitere Tabelle zu packen?
t2
ID2 Anzahl
5 10
6 7

sowas in der Art wie
01.
> UPDATE tabelle2 t2 
02.
> SET t2.id2 = t.count(*) 
03.
> ... 
04.
> WHERE t2.id2 = t.ID2  
Bitte warten ..
Mitglied: Biber
05.12.2011 um 17:54 Uhr
Moin maik87,

bist du dir sicher, dass du eine Tabelle UPDATEn willst - meinst du nicht das komplette Neubefüllen einer neuen/leeren Tabelle per INSERT INTO?

So in der Art:
01.
 INSERT INTO tabelle2 ( id,  Anzahl)  
02.
SELECT t.ID2, count(*) 
03.
 FROM tabelle t 
04.
 WHERE t.ID 
05.
 NOT IN(SELECT  d.ID 
06.
 FROM `betw` b 
07.
     LEFT JOIN `dat` d ON ( d.`id` BETWEEN b.`von` AND b.`bis` )) 
08.
 GROUP BY t.ID2
Grüßr
Biber
Bitte warten ..
Mitglied: Maik87
05.12.2011 um 18:23 Uhr
Moin Biber,

danke für deine Antwort.

Ich muss leider Updaten, weil die entsprechenden Datensätze schon in der Tabelle vorhanden sind und nur um diese Info ergänzt werden sollen/müssen.

Grüße
Maik87
Bitte warten ..
Mitglied: Biber
05.12.2011 um 18:37 Uhr
Moin Maik87,

da komm ich aber gedanklich nicht ganz mit..
Du schriebst doch " UPDATE tabelle2 t2 SET t2.id2 = t.count(*) ..." --> würde für mich heißen, die ermittelte Anzahl aus dem "alle Ids außerhalb der Between-Grenzen"-Statenment werden zur (neuen) ID ???

Oder aber... FALLS die Tabelle t2 zwei (oder mehr) Felder enthielte, unter anderem "ID" und "Anzahl" und du wolltest "Anzahl" updaten...
-> du würdest doch immer nur die Sätze updaten, bei denen du Treffer hast.

Sätze, in denen vorher die ID 4711 und die Anzahl 42 drin stand, werden doch nicht mit Anzahl=0 upgedatet,falls kein Treffer mehr da ist.
Die bleiben immer auf ihrem Wert 42 kleben.

Ich versteh das Ziel bzw. den Informationsgehalt der Tabelle t2 überhaupt nicht.

Was ist denn der Plan?

P.S. Vielleicht liegt es ja auch am Wochentag- an Tagen mit einem "t" im Namen bin ich meist etwas langsamer.

Grüße
Biber
Bitte warten ..
Mitglied: Maik87
05.12.2011 um 18:55 Uhr
Moin Biber,

ich fang mal von vorne an und hoffe, dass es verständlich ist.

Wir haben im System eine Hierarchie von Abteilungen. Du kannst sie dir wie eine Ordnerhierarchie auf der Festplatte vorstellen. Die eine Ebene beinhaltet die andere Ebene. Jede Abteilung hat nun eine vom System vorgegebene, eindeutige ID. Damit es für das menschliche Auge einfacher ist, gibt es neben dieser ID noch eine weitere ID, die so aufgebaut ist, dass jede Ebene zwei Stellen in der ID hat. Sprich erste Ebene beginnt mit 13, alles was darunter liegt bekommt die 13* usw.

Meine Tabelle "dat" ist eine Brückungstabelle. Sie brückt die "menschliche" ID zu der automatisch generierten vom System. Die Tabelle "betw" stellt nur eine Ausschlusstabelle dar, in der Bereiche der "menschlichen" ID ausgrenzt werden. Diese müssen aber, um im System damit arbeiten zu können, auf die automatische gebrückt werden.

Aus dieser Kombination ermittel ich erstmal die Zeilen aus einer Tabelle, die überhaupt in Frage kommen, nehmen dann die ID2 (Personalnummer Vorgesetzter) und zähle dann dessen vorkommen. Damit ermittel ich die Anzahl der direkt unterstellten Mitarbeiter:
01.
>SELECT t.ID2, count(*)  
02.
>FROM tabelle t  
03.
>WHERE t.ID  
04.
>NOT IN(SELECT  d.ID  
05.
>FROM `betw` b  
06.
>LEFT JOIN `dat` d ON ( d.`id` BETWEEN b.`von` AND b.`bis` )) 
Jetzt habe ich eine weitere Tabelle. In der sind viele viele Personen vorhanden. An diese Tabelle möchte ich nun die Anzahl der unterstellten Mitarbeiter dranschreiben. Ein Insert scheidet definitiv dabei aus.

Hast du verstanden was ich meine??
Bitte warten ..
Mitglied: Biber
05.12.2011 um 19:13 Uhr
Moin Maik87,

ich sach mal so - wenn die oben von dir gepostete Abfrage die richtigen bzw. die passenden Werte zurückgibt, [nach deiner Aussage so: ]
01.
SELECT t.ID2, count(*)  
02.
FROM tabelle t  
03.
WHERE t.ID  
04.
      NOT IN(  
05.
                       SELECT  d.ID  
06.
                      FROM `betw` b  
07.
                       LEFT JOIN `dat` d ON ( d.`id` BETWEEN b.`von` AND b.`bis` ) 
08.
                    )  
09.
Group by t.ID2
--> dann müsste doch das Update-Statement so aussehen
01.
UPDATE Tabelle t2 Join   (  
02.
                                     SELECT t.ID2, count(*) as AnzNotBetween 
03.
                                          FROM tabelle t  
04.
                                    WHERE t.ID  
05.
                                   NOT IN(  
06.
                                          SELECT  d.ID  
07.
                                              FROM `betw` b  
08.
                                          LEFT JOIN `dat` d ON ( d.`id` BETWEEN b.`von` AND b.`bis` ) 
09.
                                       )  
10.
                                    Group by t.ID2 
11.
                                   )  tabNotBetween  ON t2.id2=TabNotBetween.ID2 
12.
  set t2.Anzahl =   TabNotBetween.AnzNotBetween
---> Ist aber alles reiner jugendlicher Übermut und ungetestet.

Bitte nicht sofort auf produktive Daten anwenden.

Grüße
Biber
Bitte warten ..
Mitglied: Maik87
05.12.2011 um 19:22 Uhr
Hey Biber,

ja, die erste Abfrage liefert definitiv die richtigen Werte.

Ich werde dein Statement morgen einmal testen. Habe jetzt die Daten nicht zur Hand...
Auf den ersten Blick sieht es sehr gut aus. Ich glaub ich kann einfach nicht so krumm denken, wie es manchmal sein müsste.

Danke schonmal. Ich melde mich morgen früh. Hoffe, dass nun die Probleme soweit durch sind ;)
Bitte warten ..
Mitglied: Maik87
06.12.2011 um 08:37 Uhr
Moin Biber,

es läuft =)

Daaaanke!!!
Bitte warten ..
Ähnliche Inhalte
Microsoft Office

Dynamische tabellen erstellen und in einanderes arbeitsblatt kopieren

gelöst Frage von hugothemagpieMicrosoft Office18 Kommentare

Hallo allerseits, Ich bin neu in der Excel vba - Programmierung. Zur Zeit soll ich eine Tabelle erstellen der ...

PHP

PHP Tabellen automatisch nach Gruppen ID aus MYSQL erstellen

Frage von KyrinjaPHP8 Kommentare

Hallo liebe Gemeinde, ich sitze z.Z an einer Fahrzeugübersicht für unsere Feuerwehr. Hier würde ich gerne Tabellen dynamisch je ...

Datenbanken

Inkonsistente MySQL Tabellen wiederherstellen

Frage von AndroxinDatenbanken1 Kommentar

Moin, aus "Gründen" musste ich diverse MySQL Datenbanken von einer formatierten Festplatte wiederherstellen. In der Regel waren auch noch ...

Datenbanken

MySQL - Tabulator in Tabelle einfügen

gelöst Frage von mabue88Datenbanken1 Kommentar

Hallo, wie kann ich in MySQL Workbench in eine Spalte vom Typ VARCHAR() ein Tabulator ('\t') als Zeichen einfügen? ...

Neue Wissensbeiträge
Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 7 StundenSicherheit

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 16 StundenInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Erkennung und -Abwehr

Ups: Einfaches Nullzeichen hebelte den Anti-Malware-Schutzt in Windows 10 aus

Information von kgborn vor 1 TagErkennung und -Abwehr

Windows 10 ist das sicherste Windows aller Zeiten, wie Microsoft betont. Insidern ist aber klar, das es da Lücken, ...

Windows 10

Windows 10 on ARM: von Microsoft entfernte Info - Klartext, was nicht geht

Information von kgborn vor 1 TagWindows 10

Windows 10 on ARM ist ja eine neue Variante, die Microsoft im Verbund mit Geräteherstellern am Markt etablieren will. ...

Heiß diskutierte Inhalte
Server
Route-Befehl Unterstützung (unter CMD)
gelöst Frage von FKRR56Server36 Kommentare

Guten Tag , i.M. habe ich Probleme über den CMD-Route-Befehl ein Routing auf einen entfernten Server zuzulassen. Der Server ...

Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1028 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Microsoft
TV-Tipp: Das Microsoft-Dilemma
Information von kgbornMicrosoft17 Kommentare

Aktuell gibt es in Behörden und in Firmen eine fatale Abhängigkeit von Microsoft und dessen Produkten. Planlos agieren die ...

Webbrowser
Welcher Browser ist der Beste?
Frage von justtinWebbrowser15 Kommentare

Hallo Leute Ich habe eine interessante Frage. Mich wurde mal interessieren welcher Browser ist eure meinung nach der beste? ...