matz80
Goto Top

Datenbankabfrage über 2 Tabellen

Hey Leute,

ich habe ein kleine Problem und hoffe Ihr könnt mir helfen.

Gib es die Möglichkeit eine normale Datenbankabfrage über 2 Tabellen auszuführen? Also: "SELECT * FROM tabelle WHERE name LIKE '$name'"; Normale Abrage halt.,

"SELECT * FROM tabelle1, tabelle2 WHERE name LIKE '$name'";
Wär super klappt aber nicht!

Vielleicht habe ich das nicht ganz verstanden, aber:

Bei Inner Join müssen ja imemr die Where Bedingungen in den jeweiligen Tabellen sein Also: "SELECT T1.*, T2.* FROM tabelle1 T1, tabelle2 T2 WHERE T1.name = T2.name"; Ich habe aber eine variable die z.B. mit name übereinstimmen muss!

Bei UNION müssen Die (?Spaltentypen?) <- "bin mir nich sicher" und die Anzahl der abgefragten Spalten übereinstimmen Also: "SELECT name FROM tabelle1 WHERE name LIKE '$name' //Wenn ich jetzt name und id abfrage klappts nicht mehr! UNION SELECT name FROM tabelle2 WHERE name LIKE '$name'"; Ich brauche aber unterschiedliche Spalten und Anzahlen pro Tabelle.

Komm einfach nicht drauf! Hoffe Ihr versteht was ich meine und könnt mir helfen.

Besten Dank im vorraus!

Mif freundlichen Grüßen

Matz 80

Content-ID: 173869

Url: https://administrator.de/contentid/173869

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

EvilMoe
EvilMoe 28.09.2011 um 20:55:24 Uhr
Goto Top
Hallo,

natürlich geht das.
 SELECT * FROM tabelle1 as t1, tabelle2 as t2 WHERE t1.name = t2.name
EDIT: Du hast als Variable noch einen namen? Dann musste das so machen:
 SELECT * FROM tabelle1 as t1, tabelle2 as t2 WHERE t1.name = t2.name AND t2.name = '$name'  
DuNDy21x
DuNDy21x 28.09.2011 um 21:06:33 Uhr
Goto Top
Kannst du mal die beiden Tabellen beispielhaft darstellen, je 1, 2 Datensätze?
Matz80
Matz80 28.09.2011 um 21:23:45 Uhr
Goto Top
Also vielleicht habe ich ja einen Denkfehler... aber:

Die beiden tabellen haben keinen Bezug zueinander, also klappt WHERE t1.name = t2.name ja nicht.
Müsste ja WHERE name = "$variable" sein oder?

@EvilMoe

Wenn ich jetzt WHERE t1.name = t2.name AND t2.name = " .$name. " schreibe, habe ich doch das gleiche Problem oder etwa nicht?
Da die tabellen keinen Bezug zueinander haben findet er doch bei der WHERE-Bedingung "t1.name = t2.name" schon nichts!?
Da bring mir doch AND t2.name = " .$name. " doch auch nix oder?

Zu dem Beispiel (doofes Beispiel :D)

Tabelle1 (z.B Festnetztelefone)

ID | name | Beschreibug | datum
50 | T500i | Beschreibung halt... | 29.08.2010

Tabelle2 (z.B. Handys)

ID | name | Beschreibung | datum
34 | k508 | Beschreibung halt... | 13.05.2011

*Die Tabellen haben keinen Bezug zueinander also WHERE t1.ID = t2.ID bringt mit nichts*

Ist eine Sucheingabe die mehrere Tabellen von Produkte suchen und sortiert nach Namen ausgeben soll, also die ganze Palette und nicht zur einen Bereich.
EvilMoe
EvilMoe 28.09.2011 um 21:37:33 Uhr
Goto Top
Dann müsste es doch so aussehen.
SELECT * FROM tabelle1 as t1, tabelle2 as t2 WHERE t1.name = '$suche' OR t2.name = '$suche'  
So sollte die Abfrage sein?
DuNDy21x
DuNDy21x 28.09.2011 um 21:42:23 Uhr
Goto Top
Du könntest die beiden Tabellen per Union verknüpfen und dann eine Abfrage darum legen:

select X.* from (
select ID, name, Beschreibug, datum from Tabelle1
union
select ID, name, Beschreibug, datum from Tabelle2
) X where X.Name like " .$name. "

Damit solltest du dann aus beiden Tabellen alles bekommen bei dem Name der Variablen entspricht. Hierfür müssen jedoch die Tabellendefinitionen vom Typ her gleich sein, sonst müsstest du noch ein paar Umwandlungen durchführen.
Matz80
Matz80 28.09.2011 um 22:13:28 Uhr
Goto Top
@EvilMoe

Er gibt mir dabei immer den Fehler aus das die Spalte name mehrdeutig ist da sie ja in beiden vertreten ist.
Wenn ich es hingegen so probiere SELECT t1.*, t2.* FROM tabelle1 as t1, tabelle2 as t2 WHERE t1.name = '$suche' OR t2.name = '$suche'
gibt er mir die Anzahl der Reihen beider Tabellen aus, aber immer mir den Werten der zweiten Tabelle.

@DuNDy21x

Bekomme dabei immer den Fehler "Every derived table must have its own alias"
habs schon gegooglet aber nicht wirklich verstanden was der will!

Ergebnis:
SELECT num, nome FROM
(SELECT 0 as num, tema as nome FROM pesquisa) AS t1
LEFT JOIN
(SELECT COUNT(id) as num, tema as nome FROM pesquisa WHERE (YEAR(ano_defesa) = 0 OR 1=1) GROUP BY tema) As t2
On t1.num=t2.num

(habe kein konkretes Beispiel für UNION gefunden)

Mein Versuch:
select * from
(select ID, name, Beschreibug, datum from Tabelle 1) as t1
union
(select ID, name, Beschreibug, datum from Tabelle 2) as t2
where t1.name like " .$name. " //ohne t2. nur als versuch

klappt aber auch nicht!

Fehler:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as t2 where t1.name like '%$name%'' at line 4
DuNDy21x
DuNDy21x 28.09.2011 um 22:32:41 Uhr
Goto Top
Habe oben den Quelltext mal etwas angepasst, da dieser nicht ganz passend war. ggf geht es damit.
dog
dog 28.09.2011 um 22:35:27 Uhr
Goto Top
Du machst hier was falsch!

Du kannst mit SQL nicht einfach 2 Tabellen zusammenwerfen, die keinen Bezug zueinander haben (SELECT * FROM t1,t2 ist übrigens ein Kreuzprodukt).
Du solltest lieber mehrere Abfragen hintereinander machen!

Ein syntaktisch korrektes UNION wäre übrigens:
(
	select 
		id, fld1 
	from
		tbl1
	where 
		fld1 like 'a%'  
)
union
(
	select 
		id, fld1
	from 
		tbl2
	WHERE  
		fld1 like 'a%'  
)