MySQL - dynamisches between aus Tabelle erstellen
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!!
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!!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 177203
Url: https://administrator.de/forum/mysql-dynamisches-between-aus-tabelle-erstellen-177203.html
Ausgedruckt am: 07.04.2025 um 12:04 Uhr
11 Kommentare
Neuester Kommentar
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:
Grüßr
Biber
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:
INSERT INTO tabelle2 ( id, Anzahl)
SELECT t.ID2, count(*)
FROM tabelle t
WHERE t.ID
NOT IN(SELECT d.ID
FROM `betw` b
LEFT JOIN `dat` d ON ( d.`id` BETWEEN b.`von` AND b.`bis` ))
GROUP BY t.ID2
Grüßr
Biber
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
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
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: ]
--> dann müsste doch das Update-Statement so aussehen
---> Ist aber alles reiner jugendlicher Übermut und ungetestet.
Bitte nicht sofort auf produktive Daten anwenden.
Grüße
Biber
ich sach mal so - wenn die oben von dir gepostete Abfrage die richtigen bzw. die passenden Werte zurückgibt, [nach deiner Aussage so: ]
SELECT t.ID2, count(*)
FROM tabelle t
WHERE t.ID
NOT IN(
SELECT d.ID
FROM `betw` b
LEFT JOIN `dat` d ON ( d.`id` BETWEEN b.`von` AND b.`bis` )
)
Group by t.ID2
--> dann müsste doch das Update-Statement so aussehen
UPDATE Tabelle t2 Join (
SELECT t.ID2, count(*) as AnzNotBetween
FROM tabelle t
WHERE t.ID
NOT IN(
SELECT d.ID
FROM `betw` b
LEFT JOIN `dat` d ON ( d.`id` BETWEEN b.`von` AND b.`bis` )
)
Group by t.ID2
) tabNotBetween ON t2.id2=TabNotBetween.ID2
set t2.Anzahl = TabNotBetween.AnzNotBetween
---> Ist aber alles reiner jugendlicher Übermut und ungetestet.
Bitte nicht sofort auf produktive Daten anwenden.
Grüße
Biber