Ik zit even in de knoop met de volgende query:


Ik heb 2tabellen in de database, met bijna dezelfde gegevens:
TabelA:
id
naam
text

TabelB:
id
naam
text
aantal

(er zijn nog wel wat rijen maar die doen er niet toe)
Nu de gegevens die in tabel A staan die zouden vervolgens ook in TabelB moeten komen, de enigste voorwaarde is dat er uit tabelA enkel gegevens gehaald worden welke niet voorkomen in de laatste 5rijen van tabelB. (het zijn bijna dubbele gegevens in tabel A en B, na 5anderen mag er opnieuw dezelfde waarde komen)

Kan iemand me opweg zetten voor een query?
Niels Beckers op 27/04/2012 13:49:25

Ik heb 2tabellen in de database, met bijna dezelfde gegevens:


Vreemd.
Kan je niet beter normaliseren?
Uit het hoofd, dus zonder garantie dat het werkt.

SELECT a.id, a.naam, a.text
FROM tabelA a
LEFT JOIN (
  SELECT naam, text
  FROM tabelB
  ORDER BY id DESC
  LIMIT 5
) b ON (
  b.naam = a.naam
  AND b.text = a.text
) 
WHERE b.naam IS NULL
AND b.text IS NULL

Deze query joined tabel A met een subset van tabel B (alleen de laatste 5 records, uitgaande van een oplopend id) en selecteert dan die rijen waarvan b.naam en b.text leeg zijn. Met andere woorden de records uit A die geen waarde hebben uit B. Probeer dit eerst eens, met enige inventiviteit kan je hier meteen een insert mee doen om de gevonden records in te voeren.
- SanThe - op 27/04/2012 14:27:18

[quote="Niels Beckers op 27/04/2012 13:49:25"]
Ik heb 2tabellen in de database, met bijna dezelfde gegevens:


Vreemd.
Kan je niet beter normaliseren?
[/quote]

neen, het is een soort auto mailer, ik moet dus zowizo een tabel hebben waar de mailings instaan die vaker gestuurd mogen worden, en een tabel waarin de verstuurde mailings staan.

@Erwin, ik zal straks even proberen of dat lukt ;-)

Leg dat eens wat beter uit, wat dit klinkt inderdaad nogal omslachtig.
Dus ik heb 2 tabbelen

mailings (hier komen de mails welke vaker gestuurd mogen worden)
mail (hier staan alle mails in die reeds verstuurd zijn in het verleden.)
dit moet toch altijd met 2 verschillende tabellen?
Je maakt het nu een stuk duidelijker.
Het mag (en kan goed) in 2 tabellen, maar is niet persee nodig.
Je moet aan zoiets denken:

INSERT INTO mail
	(mailing_id, naam, bericht)
SELECT
	id, naam, bericht
FROM
	mailings
WHERE
 id NOT IN
	(SELECT mailing_id FROM mail ORDER BY senddate DESC LIMIT 5)
Dag Ger,

Na het proberen van je query krijg ik de volgende opmerking:

#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

Dus mijn Mysql accepteerd dit niet, bestaat er ook nog een andere mogelijkheid?
Als je MYSQL dat niet ondersteund zoals de melding zegt.
Kun je dan niet beter zorgen dat je die nieuwste versie MYSQL kan/gaat gebruiken.
indien hosting bij een derde partij zou ik die mailen en vragen om een MYSQL update.

Ik kan mij daarnaast geen versie voor de geest halen welke dit niet zal ondersteunen om eerlijk te zijn.

Reageren