You are not logged in.

  • Login

1

Monday, January 23rd 2012, 5:32pm

MYSQL: Abfrage über 2 Tabellen die 2te

Hallo zusammen,
ich habe leider nochmal ein kleines Prob mit einer Mysql Abfrage.

Folgendes Tabellenkonstrukt:

laender (a):
ID (INT) , Name(VARCHAR), continent (ENUM)

regio (b):
ID(INT), Name (VARCHAR)

regio-land (c):
ID(INT), RegioID(INT) [gleich b.ID], LandID(INT) [gleich a.ID]

mein Problem:
Ich möchte gern eine Liste der Länder aus der Tabelle "laender" ausgeben, die der ausgewählten Region noch nicht zugeordnet sind. Alle Länder die der Region bereits zugeordnet sind sollen nicht angezeigt werden.

Beispiel:
In der Tabelle "laender" steht folgendes drin:
ID,Name,continent
1, Deutschland, Europa
2,Schweiz,Europa
3,Österreich,Europa
4,Niederlande,Europa
5,USA,Nord Amerika

In der Tabelle "regio" steht folgendes drin:
ID,Name
1,Dreiländereck D-A-CH
2,Sauerland
3,Röhn

In der Tabelle "regio-land"steht folgendes drin
ID,RegioID,LandID
1,1,1
2,1,2
3,1,3
4,3,1
5,2,1

Wenn ich jetzt eine Abfrage mache für die Region 2 (Sauerland) möchte ich als Liste ausgegeben bekommen alle änder die nicht der Region Sauerland zugeordnet sind.
Also:
ID,Name
2,Schweiz
3,Österreich
4,Niederlande
5,USA

Wenn ich jetzt eine Abfrage mache für die Region 1 (Dreiländereck D-A-CH) möchte ich als Liste ausgegeben bekommen alle änder die nicht der Region Dreiländereck D-A-CH zugeordnet sind.
Also:
4,Niederlande
5,USA

Wie bekomm ich das hin??
Aktuell habe ich das hier nur dann werden mir die Länder nicht angezeigt die in der Tabelle "regio-land" irgendwo vorhanden sind.

SQL Code

1
SELECT a.ID, a.Name,a.continent FROM `laender` AS a LEFT JOIN `regio-land` AS b ON a.ID = b.LandID WHERE b.ID IS NULL ORDER BY a.continent ASC,aName ASC


Ich bitte daher nochmals um Hilfe ;-)

Mit freundlichem Gruß
boyge

2

Monday, January 23rd 2012, 7:56pm

na ganz klar, weil i nder zwischen tabelle immer zu einem lang ein eintrag gibt

PL/SQL Code

1
2
3
4
5
6
7
SELECT a.ID, a.Name,a.continent 
FROM `laender` AS a
JOIN `regio-land` AS b ON a.ID = b.LandID 
join region AS r ON  r.ID = b.regionID 
WHERE r.name <> 'region name' --du arbeitest ja warscheinlich mit namen und nciht mit ids :)
 
ORDER BY a.continent ASC,aName ASC


ungefähr so :)

3

Monday, January 23rd 2012, 9:48pm

na ganz klar, weil i nder zwischen tabelle immer zu einem lang ein eintrag gibt

PL/SQL Code

1
2
3
4
5
6
7
SELECT a.ID, a.Name,a.continent 
FROM `laender` AS a
JOIN `regio-land` AS b ON a.ID = b.LandID 
join region AS r ON  r.ID = b.regionID 
WHERE r.name <> 'region name' --du arbeitest ja warscheinlich mit namen und nciht mit ids :)
 
ORDER BY a.continent ASC,aName ASC


ungefähr so :)


Hallo shureg,
vielen dank für die Hilfe, nur leider ist das ergebnis falsch.
Ich bekomme jetzt die Länder angezeigt die ich in der tabelle "regio-land" habe und zwar alle.
Ich möchte aber die Länder angezeigt bekommen die der ausgewählten Region nicht zugewiesen sind.

MfG
boyge

4

Tuesday, January 24th 2012, 12:08pm

bei mir funktioniert alles prächtig die abfrage gibt alle länder die nicht zur region gehören.
du musst ja auch die region angeben

5

Tuesday, January 24th 2012, 12:54pm

Hallo shureg,
vielen dank für deine Antwort.
Ja das stimmt schon das ich alle Länder bekomme die nicht zur Region gehören. Ich bekomme die Länder angezeigt die zu einer anderen Region gehören. Ich brauche aber alle Länder aus der Tabelle "laender" die einer bestimmten, variablen Region nicht zugeordnet sind.

Ich habe in der Tabelle "laender" alle Länder der welt drin. In der Tabelle "regio" habe ich die Regionen drin. in der Tabelle "regio-land" habe ich die Zuordnungen der einzelnen Länder zu den Regionen drin.
Ich möchte jetzt ein Select feld haben in dem Alle länder enthalten sind die NICHT einer bestimmten Region zugeordnet sind.

Wenn ich jetzt die Region 1 aufrufe und dieser sind Deutschland, Österreich und Schweiz zugeordnet, dann möchte ich im Select Feld alle Länder der Welt haben ausser Deutschland, Österreich und Schweiz.

Wenn ich jetzt die Region 2 aufrufe und dieser sind Dänemark, Schweden, Finnland und Norwegen zugeordnet, dann möchte ich im Select Feld alle Länder haben ausser Dänemark, Schweden,Finnland und Norwegen.

ich hoffe ich habe das jetzt etwas verständlicher ausgedrückt. ;-)

6

Tuesday, January 24th 2012, 1:45pm

dann verstehe ich nicht ganz den sinn der zwischentabelle bei dir, dachte da sind alle länder den regionen zugeordet

so meinst du das? musst aber an deine tabellen anpassen, habe bei mir rumgespielt

PL/SQL Code

1
2
3
4
5
6
SELECT a.*,b.*
FROM land a
left JOIN regioland  b ON a.land_id = b.land_id
left join regio r ON  r.regio_id = b.regio_id
WHERE r.name <> 'dach' --du arbeitest ja warscheinlich mit namen und nciht mit ids :)
 OR b.regioland_id IS NULL

7

Tuesday, January 24th 2012, 4:31pm

Hallo shureg,
danke das du mir weiterhin versuchst zu helfen,
leider ist es das irgendwie immer noch nicht.
Die Tabelle "regio-land" beinhaltet die Zuordnung der Länder zu den Regionen.
Vielleicht erkläre ich mal was ich vor habe.

Als erstes lege ich eine Region an. Diese wird in der Tabelle regio gespeichert und bekommt eine ID.
jetzt gehe ich über ein Select Feld hin und wähle das erste Land aus in dem die Region liegt.
Diese Infos speichere ich in der Tabelle "regio-land" mit den Werten
RegioID = die ID der Region aus der Tabelle "regio".
LandID = die ID des Landes aus der Tabelle "laender".

Jetzt füge ich nach dem gleichen Schema ein 2tes Land hinzu.

Jetzt füge eich eine weitere Region ein. und dazu 2 weitere Länder.

Meine Tabellen sehen jetzt z.B. so aus

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Tabelle "laender"
 ID | Name        | continent
 1  | Deutschland | Europa
 2  | Österreich  | Europa
 3  | Schweiz     | Europa
 4  | Niederlande | Europa
 5  | Polen       | Europa 
 6  | Tschechien  | Europa
 7  | Italien     | Europa
usw.

Tabelle "regio"
ID | Name | 
 1 | Alpen
 2 | Tirol

Tabelle "regio-land"
ID | RegioID | LandID
1  |    1    |   2
2  |    1    |   3
3  |    2    |   2
4  |    2    |   7


Jetzt möchte ich der Region 1, weil ich es vergessen habe noch das Land Italien hinzufügen.
Und jetzt kommt das wo das Prolem liegt.
In dem Select Feld sollen nun alle Länder auftauchen die NICHT der Region 1 zugewiesen sind. Die die zugewiesen sind (Österreich und Schweiz) sollen ausgeblendet werden.
Nun habe ich auch noch festgestellt das ich in der Region 2 auch ein Land vergessen habe. Dort dürfetn jetzt in dem Selectfeld dann nicht Österreich und Italien zu sehen sein, denn diese sind der Region 2 ja schon zugewiesen.

Ich weiß jetzt wirklich nicht wie ich das noch genauer erklären soll. Die Tabelle "regio-land" ist dafür da die Länder den unterschiedlichen Regionen zuzuordnen, denn eine Region kann ja über mehrere Länder gehen.

Bei der Generierung des select Feldes sollen hat die Länder ausgeschlossen werden die der ausgewählten Region ja schon zugeordnet sind. Das ergebnis soll also sein:

Zeige ALLE Länder aus der Tabelle "laender" mit ausnahme der Länder die der Region "x" schon zugeordnet sind zu erkennen in der Tabelle "regio-land".

Vielleicht ist es jetzt etwas genauer was ich möchte ;-)

Ich weiß das die Zuweisung der Regionen jetzt in diesem Beispiel geografisch nicht ganz korrekt sind ;-)
MfG
boyge

8

Tuesday, January 24th 2012, 6:08pm

du brauchst ja keine romane zu schreiben, sag doch einfach was du haben willst und gut :D

einfacher gesagt du willst alle länder die nicht in der region-land tabelle erscheinen
dann so krigst du alle länder die noch keine region haben

PL/SQL Code

1
2
3
4
5
SELECT a.*,b.*
FROM land a
left JOIN regioland  b ON a.land_id = b.land_id
 
WHERE b.regioland_id IS NULL

9

Tuesday, January 24th 2012, 8:25pm

Das ist doch exakt das gleiche Problem wie hier:
MYSQL: Abfrage über 2 Tabellen, Werte die nicht übereinstimmen ausgeben

Du hast dich sogar auf den Titel bezogen!

10

Wednesday, January 25th 2012, 10:45am

Hallo zusammen,
leider ist das nicht das gleiche, denn in dem anderen Thread habe ich unabhängig eines zweiten Faktor die Ausgabe haben wollen.
Hier ist aber noch der Faktor Region dabei.

In der Tabelle "regio-land" sind für ALLE Regionen die Zuordnungen der einzelnen Länder enthalten.
mein Problem ist aber nun das die Ausgabe von der Tabelle "laender" immer nur von EINER Region abhängig sein soll und nicht von dem gesamten Inhalt in der Tabelle "regio-land" was bei jeder vorgeschlagenen Lösung der Fall war.

Zu erst wähle ich die Region aus. Dann soll ein Selectfeld generiert werden wo ALLE Länder der Welt drin sind mit AUSNAHME derer die der ausgewählten Region schon zugeordnet sind. In der Tabelle "regio-land" sind für ALLE Regionen die Zuordnungen drin. Es soll also geprüft werden Welche Länder sind mit der entsprechenden Region schon verknüpft, diese bitte ausblenden.
Ich weiß wirklich nicht wie ich das noch einfacher erklären soll.
Ich bedanke mich trotzdem für eure Hilfe.

MfG
boyge

11

Wednesday, January 25th 2012, 1:48pm

ich glaube du weisst selbst nicht was du willst...
entweder du erhälst alle länder die keiner region zugewissen sind, dann brauchst du auch nciht die region mit einzubeziehen, da sie gar keine zugewiesen sind.
oder alle länder die einer region nicht zugewiesen,können aber auch andere region bereits zugewiesen sein.


du kannst nicht selektieren nur die länder die möglicherweise zu der gegebenen gehören aber nicht zugewiesen wurden, entweder alle länder die nicht zugewiesen sind oder garkeine

beide abfragen habe ich dir bereits geliefert.

12

Wednesday, January 25th 2012, 4:05pm

Hallo,
ich weiß schon was ich will.
ich möchte alle Länder angezeigt haben, die der ausgewählten Region nicht zugeordnet sind.
Ich selektiere eine Region aus der Tabelle "regio" diese hat eine ID. Mit Hilfe dieser ID schaue ich in der Tabelle "regio-land" nach welche Länder sind der Region schon zugeordnet. Diese Länder sollen nun beim erstellen des Selectfeldes mit der Tabelle "laender" ausgeschlossen, also nicht im Selectfeld angezeigt werden.

Ich brauche nun also eine Select Anweisung die genau dieses macht. Der ich die ID der ausgewählten Region übergebe und die dann prüft welche Länder sind der Region zugeordnet und schliesst diese beim Erstellen des Selectfeldes aus der Tabelle "laender" aus.

Das kann doch eigentlich nicht so schwer zu verstehen sein.

13

Wednesday, January 25th 2012, 4:29pm


ich möchte alle Länder angezeigt haben, die der ausgewählten Region nicht zugeordnet sind.

Quoted

entweder du erhälst alle länder die keiner region zugewissen sind,


sag mir wo da der unterschied sind?
du hast eine region und bekommst alle länder die noch diese region haben, also sibnd das alle länder die keine region haben :wacko:

sag mir was in deinem beispiel rauskommen soll und nciht was nicht rauskommen soll, bei region 1 und bei region 2
MYSQL: Abfrage über 2 Tabellen die 2te

This post has been edited 1 times, last edit by "shureg" (Jan 25th 2012, 4:41pm)


14

Wednesday, January 25th 2012, 5:30pm

Hallo shureg,
Ich möchte alle Länder haben die der Region die ich vorher ausgewählt habe noch NICHT zugeordnet sind. Das möchte ich haben.
Ich mach mir jetzt mal die Mühe und kopiere mal die Livedaten hier rein um die es geht.

Tabelle regio:

SQL Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
"ID";"Name";"Text";"Sync"
"1";"Dreiländereck D-F-CH";"test";"1"
"2";"Dreiländereck D-A-CH";"test";"1"
"3";"Dreiländereck D-A-CZ";"test";"1"
"4";"Dreiländereck D-CZ-PL";"test";"1"
"5";"Dreiländereck D-NL-BE";"test";"1"
"6";"Dreiländereck D-BE-F";"test";"1"
"7";"Röhn";"test";"1"
"8";"Rhein-Main-Gebiet";"test";"1"
"9";"Tirol";"test";"1"
 
Tabelle "laender" (ausschnitt nur Europa):
"id";"continent";"nameger"
"4";"Europa";"Aland"
"5";"Europa";"Albanien"
"10";"Europa";"Andorra"
"27";"Europa";"Belgien"
"33";"Europa";"Bosnien und Herzegowina"
"40";"Europa";"Bulgarien"
"51";"Europa";"Dänemark"
"52";"Europa";"Deutschland"
"61";"Europa";"Estland"
"64";"Europa";"Färöer"
"66";"Europa";"Finnland"
"67";"Europa";"Frankreich"
"73";"Europa";"Georgien"
"77";"Europa";"Griechenland"
"82";"Europa";"Guernsey, Vogtei"
"95";"Europa";"Irland, Republik"
"96";"Europa";"Island"
"98";"Europa";"Italien"
"102";"Europa";"Jersey"
"123";"Europa";"Kroatien"
"129";"Europa";"Lettland"
"133";"Europa";"Liechtenstein, Fürstentum"
"134";"Europa";"Litauen"
"135";"Europa";"Luxemburg"
"142";"Europa";"Malta"
"149";"Europa";"Mazedonien"
"152";"Europa";"Moldawien"
"153";"Europa";"Monaco"
"259";"Europa";"Montenegro"
"165";"Europa";"Niederlande"
"172";"Europa";"Norwegen"
"174";"Europa";"Österreich"
"184";"Europa";"Polen"
"185";"Europa";"Portugal"
"189";"Europa";"Rumänien"
"194";"Europa";"San Marino"
"197";"Europa";"Schweden"
"198";"Europa";"Schweiz"
"200";"Europa";"Serbien und Montenegro"
"205";"Europa";"Slowakei"
"206";"Europa";"Slowenien"
"208";"Europa";"Spanien"
"218";"Europa";"Svalbard und Jan Mayen"
"232";"Europa";"Tschechische Republik"
"240";"Europa";"Ukraine"
"258";"Europa";"Ungarn"
"245";"Europa";"Vatikanstadt"
"249";"Europa";"Vereinigtes Königreich von Großbritannien und Nordirland"
"253";"Europa";"Weißrussland"
 
Tabelle "regio-land":
"ID";"RegioID";"LandID";"Sync"
"1";"1";"52";"1"
"2";"1";"67";"1"
"3";"1";"198";"1"
"4";"2";"52";"1"
"5";"2";"174";"1"
"6";"2";"198";"1"
"7";"3";"52";"1"
"8";"3";"174";"1"
"9";"3";"232";"1"
"10";"4";"52";"1"
"11";"4";"232";"1"
"12";"4";"184";"1"
"13";"5";"52";"1"
"14";"5";"165";"1"
"15";"5";"27";"1"
"16";"6";"52";"1"
"17";"6";"27";"1"
"18";"6";"67";"1"
"19";"7";"52";"1"
"20";"9";"174";"1"


Wenn ich jetzt das erste beispiel von dir anwende kommt dieses raus:

SQL Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
SELECT a.ID, a.nameger,a.continent  
FROM `config-laender` AS a 
JOIN `config-regio-land` AS b ON a.ID = b.LandID  
JOIN `config-regio` AS r ON r.ID = b.regioID  
WHERE r.name <> 'Dreiländereck D-A-CH'  
ORDER BY a.continent ASC,a.nameger ASC;
 
"ID";"nameger";"continent"
"27";"Belgien";"Europa"
"27";"Belgien";"Europa"
"52";"Deutschland";"Europa"
"52";"Deutschland";"Europa"
"52";"Deutschland";"Europa"
"52";"Deutschland";"Europa"
"52";"Deutschland";"Europa"
"52";"Deutschland";"Europa"
"67";"Frankreich";"Europa"
"67";"Frankreich";"Europa"
"165";"Niederlande";"Europa"
"174";"Österreich";"Europa"
"174";"Österreich";"Europa"
"184";"Polen";"Europa"
"198";"Schweiz";"Europa"
"232";"Tschechische Republik";"Europa"
"232";"Tschechische Republik";"Europa"

dabei werden mir alle Länder angezeigt die in der Tabelle "regio-land" enthalten sind und die nicht der Region "Dreiländereck D-A-CH" zugeordnet sind.

Bei dem 2ten Lösungsansatz kommt folgendes raus (diese Select-Anweisung ist deiner Version etwas angepasst um nicht die gesamten Daten auszugeben, inhaltlich ist sie aber gleich):

SQL Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
SELECT a.continent,a.nameger,a.id,b.id AS RegioLandID,b.RegioID,b.LandID 
FROM `config-laender` a
LEFT JOIN `config-regio-land` b ON a.id = b.LandID 
LEFT JOIN `config-regio` r ON r.ID = b.RegioID 
WHERE r.name <> 'Dreiländereck D-A-CH'  OR b.ID IS NULL AND a.continent = 'Europa'   
ORDER BY a.continent ASC,a.nameger ASC;
 
"continent";"nameger";"id";"RegioLandID";"RegioID";"LandID"
"Europa";"Aland";"4";NULL;NULL;NULL
"Europa";"Albanien";"5";NULL;NULL;NULL
"Europa";"Andorra";"10";NULL;NULL;NULL
"Europa";"Belgien";"27";"15";"5";"27"
"Europa";"Belgien";"27";"17";"6";"27"
"Europa";"Bosnien und Herzegowina";"33";NULL;NULL;NULL
"Europa";"Bulgarien";"40";NULL;NULL;NULL
"Europa";"Dänemark";"51";NULL;NULL;NULL
"Europa";"Deutschland";"52";"1";"1";"52"
"Europa";"Deutschland";"52";"7";"3";"52"
"Europa";"Deutschland";"52";"10";"4";"52"
"Europa";"Deutschland";"52";"13";"5";"52"
"Europa";"Deutschland";"52";"16";"6";"52"
"Europa";"Deutschland";"52";"19";"7";"52"
"Europa";"Estland";"61";NULL;NULL;NULL
"Europa";"Färöer";"64";NULL;NULL;NULL
"Europa";"Finnland";"66";NULL;NULL;NULL
"Europa";"Frankreich";"67";"2";"1";"67"
"Europa";"Frankreich";"67";"18";"6";"67"
"Europa";"Georgien";"73";NULL;NULL;NULL
"Europa";"Griechenland";"77";NULL;NULL;NULL
"Europa";"Guernsey, Vogtei";"82";NULL;NULL;NULL
"Europa";"Irland, Republik";"95";NULL;NULL;NULL
"Europa";"Island";"96";NULL;NULL;NULL
"Europa";"Italien";"98";NULL;NULL;NULL
"Europa";"Jersey";"102";NULL;NULL;NULL
"Europa";"Kroatien";"123";NULL;NULL;NULL
"Europa";"Lettland";"129";NULL;NULL;NULL
"Europa";"Liechtenstein, Fürstentum";"133";NULL;NULL;NULL
"Europa";"Litauen";"134";NULL;NULL;NULL
"Europa";"Luxemburg";"135";NULL;NULL;NULL
"Europa";"Malta";"142";NULL;NULL;NULL
"Europa";"Mazedonien";"149";NULL;NULL;NULL
"Europa";"Moldawien";"152";NULL;NULL;NULL
"Europa";"Monaco";"153";NULL;NULL;NULL
"Europa";"Montenegro";"259";NULL;NULL;NULL
"Europa";"Niederlande";"165";"14";"5";"165"
"Europa";"Norwegen";"172";NULL;NULL;NULL
"Europa";"Österreich";"174";"8";"3";"174"
"Europa";"Österreich";"174";"20";"9";"174"
"Europa";"Polen";"184";"12";"4";"184"
"Europa";"Portugal";"185";NULL;NULL;NULL
"Europa";"Rumänien";"189";NULL;NULL;NULL
"Europa";"San Marino";"194";NULL;NULL;NULL
"Europa";"Schweden";"197";NULL;NULL;NULL
"Europa";"Schweiz";"198";"3";"1";"198"
"Europa";"Serbien und Montenegro";"200";NULL;NULL;NULL
"Europa";"Slowakei";"205";NULL;NULL;NULL
"Europa";"Slowenien";"206";NULL;NULL;NULL
"Europa";"Spanien";"208";NULL;NULL;NULL
"Europa";"Svalbard und Jan Mayen";"218";NULL;NULL;NULL
"Europa";"Tschechische Republik";"232";"9";"3";"232"
"Europa";"Tschechische Republik";"232";"11";"4";"232"
"Europa";"Ukraine";"240";NULL;NULL;NULL
"Europa";"Ungarn";"258";NULL;NULL;NULL
"Europa";"Vatikanstadt";"245";NULL;NULL;NULL
"Europa";"Vereinigtes Königreich von Großbritannien und Nordirland";"249";NULL;NULL;NULL
"Europa";"Weißrussland";"253";NULL;NULL;NULL


Nach den Daten die ich jetzt hier gepostet habe möchte ich folgendes Ergebnis haben für die Region "Dreiländereck D-A-CH" :
"id";"continent";"nameger"
"4";"Europa";"Aland"
"5";"Europa";"Albanien"
"10";"Europa";"Andorra"
"27";"Europa";"Belgien"
"33";"Europa";"Bosnien und Herzegowina"
"40";"Europa";"Bulgarien"
"51";"Europa";"Dänemark"
"52";"Europa";"Deutschland" <-- IST NICHT IM ERGEBNIS VORHANDEN!!!!
"61";"Europa";"Estland"
"64";"Europa";"Färöer"
"66";"Europa";"Finnland"
"67";"Europa";"Frankreich"
"73";"Europa";"Georgien"
"77";"Europa";"Griechenland"
"82";"Europa";"Guernsey, Vogtei"
"95";"Europa";"Irland, Republik"
"96";"Europa";"Island"
"98";"Europa";"Italien"
"102";"Europa";"Jersey"
"123";"Europa";"Kroatien"
"129";"Europa";"Lettland"
"133";"Europa";"Liechtenstein, Fürstentum"
"134";"Europa";"Litauen"
"135";"Europa";"Luxemburg"
"142";"Europa";"Malta"
"149";"Europa";"Mazedonien"
"152";"Europa";"Moldawien"
"153";"Europa";"Monaco"
"259";"Europa";"Montenegro"
"165";"Europa";"Niederlande"
"172";"Europa";"Norwegen"
"174";"Europa";"Österreich" <-- IST NICHT IM ERGEBNIS VORHANDEN!!!
"184";"Europa";"Polen"
"185";"Europa";"Portugal"
"189";"Europa";"Rumänien"
"194";"Europa";"San Marino"
"197";"Europa";"Schweden"
"198";"Europa";"Schweiz" <-- IST NICHT IM ERGEBNIS VORHANDEN!!!
"200";"Europa";"Serbien und Montenegro"
"205";"Europa";"Slowakei"
"206";"Europa";"Slowenien"
"208";"Europa";"Spanien"
"218";"Europa";"Svalbard und Jan Mayen"
"232";"Europa";"Tschechische Republik"
"240";"Europa";"Ukraine"
"258";"Europa";"Ungarn"
"245";"Europa";"Vatikanstadt"
"249";"Europa";"Vereinigtes Königreich von Großbritannien und Nordirland"
"253";"Europa";"Weißrussland"

Die roten Daten sollen im Ergebnis nicht erscheinen da diese ja sowieso schon der Region "Dreiländereck D-A-CH" zugewiesen sind. Wenn ich jetzt eine andere Region nehme sollen die Länder ausgeblendet werden die der Region in der Tabelle regio-land schon zugewiesen sind.

Ich hoffe jetzt ist es verständlich ;-)

15

Wednesday, January 25th 2012, 10:24pm

so ich glaube jetzt ist es das was du möchtest, ist aber nicht gerade sauber denke ich mal.
optimieren musst du dann selbst ;)

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
select a.*
       ,b.*
       ,c.* 
from scott.land a  

left join scott.regioland b on b.land_id = a.land_id 
left join scott.regio c on c.regio_id= b.regio_id
where 

c.name <>'dach'  

and a.land_id not in(select a.land_id
                        
                  from scott.land a  

                  left join scott.regioland b on b.land_id = a.land_id 
                  left join scott.regio c on c.regio_id= b.regio_id
                  where 

                  c.name ='dach')
or  b.regioland_id is null


PS: ich teste alles unter oracle, weiss nicht ob es auch so weit in mysql funktioniert

This post has been edited 1 times, last edit by "shureg" (Jan 25th 2012, 10:37pm)


16

Thursday, January 26th 2012, 10:11am

Hallo shureg,
vielen vielen Dank. Genau das ist es 8)

SQL Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT a.id,a.continent,a.nameger
FROM `config-laender` a  
LEFT JOIN `config-regio-land` b ON b.LandID = a.id 
LEFT JOIN `config-regio` c ON c.ID= b.RegioID
WHERE 
 
c.ID <> 2  
 
AND a.id NOT IN(SELECT a.id
 
                  FROM `config-laender` a  
 
                  LEFT JOIN `config-regio-land` b ON b.LandID = a.id 
                  LEFT JOIN `config-regio` c ON c.ID = b.RegioID
                  WHERE 
 
                  c.ID = 2)
OR  b.ID IS NULL
GROUP BY a.id
ORDER BY a.continent ASC, a.nameger ASC

Es funktioniert bestens.

Ich bedanke mich auch für die Geduld die du aufgebracht hast :D

MfG
boyge

Social bookmarks