[MySQL] select distinct op meerdere tabellen

Pagina: 1
Acties:

  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 19-08 19:06
Ik heb een database waarin gegevens gelogd worden. Er zijn 3 tabellen waarin elke rij een gelogd item is, met een datumveld (dit heet in elke tabel 'bdatetime'). Nu wil ik met één query alle data (datums red.) eruit hebben die erin voorkomen, zonder dubbele.

SQL:
1
2
3
4
5
6
-- zo verkrijg ik alle verschillende data uit één tabel:
SELECT DISTINCT DATE_FORMAT(bdatetime, '%Y-%m-%d') FROM tegoed;
-- als ik meerdere tabellen toevoeg wordt bdatetime ambigue:
SELECT DISTINCT DATE_FORMAT(bdatetime, '%Y-%m-%d') FROM tegoed, bedrag, debet;
-- als ik vervolgens tabelnamen voor de veldnaam zet krijg ik maar een veld terug (logisch):
SELECT DISTINCT DATE_FORMAT(tegoed.bdatetime, '%Y-%m-%d') FROM tegoed, bedrag, debet;


Ik heb al gekeken naar joins, maar zou niet weten hoe het daarmee op te lossen is. Ook is de MySQL versie te laag (3.23 oid.) om er subqueries op los te laten.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Op een of andere manier heb ik het idee dat je hier UNION moet gebruiken, alhoewel ik niet weer op MySQL dat ondersteunt.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 19-08 19:06
gorgi_19 schreef op 25 juni 2003 @ 12:25:
Op een of andere manier heb ik het idee dat je hier UNION moet gebruiken, alhoewel ik niet weer op MySQL dat ondersteunt.
Vanaf 4.0 als ik me niet vergis, dus dat wordt lastig...

edit:
misschien moet ik maar eens gaan upgraden naar 4.0

[ Voor 11% gewijzigd door Limhes op 25-06-2003 12:27 ]


  • momania
  • Registratie: Mei 2000
  • Laatst online: 22:52

momania

iPhone 30! Bam!

Gewoon drie keer de datum selecteren lijkt mij, maar dan alleen steeds de tabel veranderen:
SQL:
1
2
3
4
5
6
7
8
SELECT 
  DISTINCT DATE_FORMAT(tegoed.bdatetime, '%Y-%m-%d')  AS TEGOED,
  DISTINCT DATE_FORMAT(bedrag.bdatetime, '%Y-%m-%d') AS BEDRAG,
  DISTINCT DATE_FORMAT(debet.bdatetime, '%Y-%m-%d') AS DEBET
FROM 
   tegoed, 
   bedrag, 
   debet;

Neem je whisky mee, is het te weinig... *zucht*


  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 19-08 19:06
momania schreef op 25 June 2003 @ 12:27:
Gewoon drie keer de datum selecteren lijkt mij, maar dan alleen steeds de tabel veranderen:
SQL:
1
2
3
4
5
6
7
8
SELECT 
  DISTINCT DATE_FORMAT(tegoed.bdatetime, '%Y-%m-%d')  AS TEGOED,
  DISTINCT DATE_FORMAT(bedrag.bdatetime, '%Y-%m-%d') AS BEDRAG,
  DISTINCT DATE_FORMAT(debet.bdatetime, '%Y-%m-%d') AS DEBET
FROM 
   tegoed, 
   bedrag, 
   debet;
Ik ga em ff uitproberen...

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Een distinct geldt altijd voor de combinatie van de complete select list.
Dat gaat dus niet werken.

Je hebt een union of een programmatische oplossing nodig.

Who is John Galt?


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Evt kan je hier een temporary table gebruiken:

create temporary table dates (bdatetime ... primary key not null);
INSERT INTO dates SELECT bdatetime FROM tegoed;
INSERT INTO dates SELECT bdatetime FROM bedrag;
INSERT INTO dates SELECT bdatetime FROM debet;

SELECT DATE_FORMAT(bdatetime, '%Y-%m-%d') FROM dates;

(door de primary key heb je trouwens geen distincts meer nodig ;) )

[ Voor 30% gewijzigd door ACM op 25-06-2003 12:37 ]


  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 19-08 19:06
justmental schreef op 25 June 2003 @ 12:32:
Een distinct geldt altijd voor de combinatie van de complete select list.
Dat gaat dus niet werken.

Je hebt een union of een programmatische oplossing nodig.
Ja, de dubbele distinct werkt idd niet. Ik ga kijken of ik niet kan upgraden naar 4.0, dan kan ik union wel gebruiken namelijk.

  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 19-08 19:06
ACM schreef op 25 June 2003 @ 12:33:
Evt kan je hier een temporary table gebruiken:

create temporary table dates (bdatetime ... primary key not null);
INSERT INTO dates SELECT bdatetime FROM tegoed;
INSERT INTO dates SELECT bdatetime FROM bedrag;
INSERT INTO dates SELECT bdatetime FROM debet;

SELECT DATE_FORMAT(bdatetime, '%Y-%m-%d') FROM dates;
Misschien dat dit wel nog een oplossing is. Ik los het namelijk liever niet programmatisch op, zoals JustMental opperde, daar ik zoveel mogelijk op programmacode wil sparen.
Pagina: 1