WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   sql-frage spalten selektieren (http://www.wcm.at/forum/showthread.php?t=147605)

rem996 15.10.2004 14:56

sql-frage spalten selektieren
 
hi!

ich hätt da ein paar fragen zu sql, bin mir nicht sicher ob das mit sql überhaupt geht, drum frag ich lieber vorher nach :P

1. frage
ok, also ich habe 2 tabellen, in der einen stehen personen-infos mit einem eindeutigen key. der key ist mit einer anderen tabelle verbunden in der eigenschaften der person als spalten aufgeführt sind. das heisst zu jeder person x in table 1 besteht genau 1 zeile in table 2. die werte sind einfache true/false flags.

mir ist klar dass ich zu jeder person die ganzen werte ausgeben kann, aber kann ich z.b. nur alle spalten für eine person ausgeben in denen der wert 'true' ist?? geht das über die columns?

2. frage
wenn ich die werte (spaltennamen in table2) kategorisieren möchte, hab ich mir überlegt eine dritte tabelle zu erstellen in der die kategorien hinterlegt sind, beispielsweise ich verknüpfe den spaltennamen Applikationsentwickler mit der kategorie IT-Ausbildung. Nun möchte ich bsp-weise für eine person alle fähigkeiten für diese kategorie auslesen, also nehme ich alle spaltennamen in der table 3 über eine id bsp und müsste dann die werte der spalten mit diesem namen aus table 2 auslesen....
ich weiss das es geht mit dynamic sql oder auch plsql. mit normalem sql geht das nicht oder?

wäre dankbar für eine kurze antwort.. (kürzer als meine problembeschreibung) :D

thx

jak 15.10.2004 19:02

ad 1.)
d.h. du hast sowas:
--------
Tabelle1
--------
id|name
00|1.Name
01|2.Name
02|usw

--------
Tabelle2
--------
id|a|b|c|d|e|f
00|0|1|0|1|0|0
01|1|1|0|0|0|1
usw.
Oder ist es ganz anders?
Wenn du das obige hast: Warum hast du's dann überhaupt in zwei verschiedenen Tabellen?
AFAIK kannst du nicht nur Spalten anzeigen die true sind. Da du dir das Ergebniss deines Selects aber vermutlich nicht auf der Kommandozeile anschaust sondern irgendwie weiterverarbeitest, würd' ich das dann im Programm lösen.

ad2.)
AFAIK auch nicht, du könntest aber statt der dritten Tabelle mit den Kategorien einen VIEW anlegen. MySQL kann das aber noch nicht (für 5.1 geplant). Ansonsten siehe 1.) also erstmal alles abfragen und dann im Programm nur die entsprechenden Spalten anzeigen.

Jak

rem996 16.10.2004 12:55

hallo jak!

jo, genauso siehts aus, ich weiss schon, dass ich das alles in eine tabelle zusammenziehen kann. nur hab ich dann ein table mit 300 spalten :p

hab mir schon gedacht, dass das nicht wirklich geht, naja ich werds wahrscheinlich eh nur für einfache selects und reports brauchen also krieg ich das schon hin.

danke!

JackLemon 16.10.2004 15:24

wenn bei einer tabelle die daten in die breite gehen wie bei dir, und nicht in die tiefe (also x- statt y-achse), dann ist schlicht und einfach das datenbank-desing falsch.

soetwas kann man _immer_ auf der y-achse lösen. du kannst (= vereinfachtes beispiel) eine tabelle mit ID und skill machen (id: 1/skill: programmieren, id: 2/skill: office, ...) und sie mit einer n:n verknüpfung (über eine zwischentabelle mit personId -> skillId) verbinden.

nie in die breite gehen wenn's - so wie bei dir - nicht notwendig ist. und: dann kannst du auch ganz einfach alle true-spalten anzeigen, musst nur in der n:n-tabelle nach personenId filtern und mit der skill-tabelle joinen - voilà!

rem996 18.10.2004 12:50

danke für deinen comment

ich weiss selber dass das design falsch ist, ich hab selber genug mit dbs zu tun gehabt. nur muss ich in 2 tagen eine db über access erstellen, also mach ich ein schema wie du gesagt hast.

ich hatte 3 tabellen, 1 mit person, zweite mit den skills pro person und die dritte mit angaben zum skill, sowie gruppierung der skills...

nur muss ich das schema über access in formularen darstellen können und da ich mich mit diesem sche*** ned auskenne, hab ich 2 tage rumgewurschtelt und am schluss alles über den haufen geworfen, weil ich den formularzugriff auf mein ursprüngliches design ned hingekriegt hab (vielleicht mit der zeit, aber nicht innerhalb von 2 tagen)

darum ist das falsche db-design rausgekommen, ned weil ich's nicht anders machen hätte können

abr trotzdem danke für den beitrag


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

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag