PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   wieder mal: Spalten aus 2 Tabellen zusammen fassen (http://www.selfphp.de/forum/showthread.php?t=22267)

crawford2010 18.10.2009 13:25:11

wieder mal: Spalten aus 2 Tabellen zusammen fassen
 
Hallo zusammen,

bin recht neu in mySQL und muss zugeben den JOIN noch nicht wirklich verstanden (oder gar verinnerlicht zu haben).

Ich muss foilgendes lösen:

2 Tabellen,

tab1: id, mail
tab2: id, mail, newsletter uvm.

Ausgabe soll enthalten:

Felder mail beider Tabellen, von tab2 aber nur wenn newsletter = '1'
Idealerweise doppelte Einträge heraus gefiltert.
Mit zwei getrennten Abfragen ist das kein Problem, ich bekomme es aber nicht in einer Abfrage hin.

Danke für einen Tipp,

schöne Grüße,

Michael

cortex 18.10.2009 13:43:54

AW: wieder mal: Spalten aus 2 Tabellen zusammen fassen
 
Zitat:

Zitat von crawford2010 (Beitrag 131489)
bin recht neu in mySQL und muss zugeben den JOIN noch nicht wirklich verstanden (oder gar verinnerlicht zu haben).

vielleicht hilft dir dieses kleine tutorial weiter: Einführung in Joins

cx

crawford2010 18.10.2009 13:53:31

AW: wieder mal: Spalten aus 2 Tabellen zusammen fassen
 
Hallo,

Zitat:

Zitat von cortex (Beitrag 131490)
vielleicht hilft dir dieses kleine tutorial weiter: Einführung in Joins

cx

das kenne ich bereits, aber entweder liegt es an meiner Erkältung oder ich verstehe etwas grundsätzliches nicht.

Ich möchte nicht
Spalte "a" aus tab1 nur wenn Wert identisch mit Spalte "a" aus tab2, sondern:

alle Werte aus tab1.a gemischt mir alle Werte aus tab2.a, letzteres aber nur wenn tab2.b = "1" ist. Außerdem noch natural, also Dubletten unterdrücken.

Ich krieg's einfach nicht hin. Vielleicht bin ich mit JOIN ja auf dem völlig falschen Dampfer?! Aber wie sonst...

Trotzdem Danke,

viele Grüße,

Michael

Crisps 18.10.2009 15:17:26

AW: wieder mal: Spalten aus 2 Tabellen zusammen fassen
 
Du willst also alle mail Einträge aus Tabelle1 und Tabelle2 (bei letzterem nur wenn newsletter = 1 ist) und dabei gleich die doppelten Einträge entfernen?

Wenn ich das richtig verstanden hab, sollten zwei SELECT Abfragen mit UNION das richtige dafür sein:
Code:

SELECT DISTINCT t1.mail
  FROM tab1 AS t1
UNION
SELECT DISTINCT t2.mail
  FROM tab2 AS t2
 WHERE t2.newsletter = 1


feuervogel 18.10.2009 16:33:28

AW: wieder mal: Spalten aus 2 Tabellen zusammen fassen
 
Zitat:

alle Werte aus tab1.a gemischt mir alle Werte aus tab2.a, letzteres aber nur wenn tab2.b = "1" ist. Außerdem noch natural, also Dubletten unterdrücken.

select distinct tab1.a, tab2.a from tab1 join tab2 where tab2.b = 1

du lässt halt einfach die join-bedingung weg.

Zitat:

Ich krieg's einfach nicht hin. Vielleicht bin ich mit JOIN ja auf dem völlig falschen Dampfer?! Aber wie sonst...
vielleicht solltest du dich mal mit den grundlagen der mengenlehre beschäftigen und dann lernen, was du eigentlich willst und wie sich das dann auf sql übetragen lässt. willst du eine vereinigung, ein kreuzprodukt, eine schnittmenge etc...

crawford2010 18.10.2009 17:09:15

AW: wieder mal: Spalten aus 2 Tabellen zusammen fassen
 
Hallo,

Zitat:

Zitat von Crisps (Beitrag 131495)
Du willst also alle mail Einträge aus Tabelle1 und Tabelle2 (bei letzterem nur wenn newsletter = 1 ist) und dabei gleich die doppelten Einträge entfernen?

Richtig.

Code:

SELECT DISTINCT t1.mail
  FROM tab1 AS t1
UNION
SELECT DISTINCT t2.mail
  FROM tab2 AS t2
 WHERE t2.newsletter = 1

Funktioniert genau wie ich es wollte, Super!

Danke dafür.

Viele Grüße,

Michael

crawford2010 18.10.2009 17:12:14

AW: wieder mal: Spalten aus 2 Tabellen zusammen fassen
 
Hallo,

Zitat:

Zitat von feuervogel (Beitrag 131496)
select distinct tab1.a, tab2.a from tab1 join tab2 where tab2.b = 1

du lässt halt einfach die join-bedingung weg.

Mir ist nicht klar was Du meinst. Deinen Vorschlag hatte ich versucht, genau so funktionierte es aber nicht.

Zitat:

Zitat von feuervogel (Beitrag 131496)
vielleicht solltest du dich mal mit den grundlagen der mengenlehre beschäftigen und dann lernen, was du eigentlich willst und wie sich das dann auf sql übetragen lässt. willst du eine vereinigung, ein kreuzprodukt, eine schnittmenge etc...

Ja, das sollte ich vielleicht...

Danke & Gruß,

Michael

feuervogel 18.10.2009 22:14:09

AW: wieder mal: Spalten aus 2 Tabellen zusammen fassen
 
Zitat:

Zitat von crawford2010 (Beitrag 131500)
Hallo,



Mir ist nicht klar was Du meinst. Deinen Vorschlag hatte ich versucht, genau so funktionierte es aber nicht.




fehlermeldung? beispieldaten zum ausprobieren? exakte tabellenstruktur?

crawford2010 19.10.2009 10:09:38

AW: wieder mal: Spalten aus 2 Tabellen zusammen fassen
 
Zitat:

Zitat von feuervogel (Beitrag 131504)
fehlermeldung? beispieldaten zum ausprobieren? exakte tabellenstruktur?

Keine Fehlermeldung, nur falsche Ausgabe. In beiden Tabellen existieren je ca. 200 einträge, die Ausgabe beträgt. 60400 Zeilen.
Ich glaube JOIN war der falsche Ansatz.

Es gibt eine Tabelle "newsletter", Felder id, mail, name.
Tabelle kunden: id, jede_menge_felder, mail, newsletter.

Ausgabe sollte sein: von Tabelle newsletter sämtliche Datensätze, von Tabelle kunden nur die, bei denen das Feld "newsletter" den Wert "1" hat.

Das ganze von doppelten Einträgen bereinigt.

Es ist aber bereits gelöst, Crisps hat mich auf die richtige Spur gesetzt.

Nochmals Danke,

Gruß,

Michael

feuervogel 19.10.2009 12:17:38

AW: wieder mal: Spalten aus 2 Tabellen zusammen fassen
 
gut, das hatte ich überlesen.

JOIN: kreuzprodukt, UNION: vereinigung.


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:30:18 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.