![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Inventar
![]() Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343
|
![]() hi,
ich hoffe ihr könnt mir bei dem folgenden problem helfen (sitze jetzt schon einige Stunden daran): ich habe 3 tabellen: services, changeform und personen ich möchte nun über changeform eine abfrage machen. dort sind u.a. IDs enthalten, die auf die anderen beiden tabellen verweisen (s_id bzw. p_id) und dort genau so heißen. ich möchte nun bei meiner abfrage nicht nur einfach die einträge aus changeform haben, sondern anstatt der IDs die entsprechenden einträge aus den anderen beiden tabellen. das wäre an und für sich nicht so schwierig über Code:
SELECT CF.<alle spalten, die ich haben will>, S.s_name, P.p_name FROM changeform CF, personen P, services S WHERE CF.s_id=S.s_id AND CF.p_id=P.p_id ; als ergebnis sollen alle einträge aus changeform ausgegeben werden mit den entsprechenden werten aus den anderen beiden tabellen anstatt der IDs sowie, falls p_id=0, genau das anstatt eines werts (den es ja nicht gibt, weil in personen kein eintrag dafür existiert) zurückgegeben wird. wie müßte ein solches statement aussehen (DB ist MySQL)?
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret." Then he pulled the trigger of his BFG9000. |
![]() |
![]() |
![]() |
#2 |
Inventar
![]() |
![]() der Text ist schön und gut, aber ein kurzer Tabellenaufbau mit ein paar Beispielinhalten wäre aber um einiges einfacher, sowas zu lösen
btw. MySQL 5? pong
____________________________________
\"Ein Gewitter reinigt die Luft\", sagte der Mann, nachdem ein Blitz seine Frau erschlug Nicht klicken! Erstposteralarm/Beschwerde/Kummerkasten Verplattet |
![]() |
![]() |
![]() |
#3 | ||
Inventar
![]() Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343
|
![]() Zitat:
in tabellenform wäre das: tabelle changeform: ... | s_id | p_id | ... tabelle services: s_id | s_name | ... tabelle personen: p_id | p_name | ... s_id und p_id in changeform beziehen sich wie gesagt auf die entsprechenden felder in services und personen, wobei entsprechend s_name und p_name extrahiert werden sollen. das problem ist, daß in changeform bei p_id defaultmäßig 0 drinsteht (bedeutet, daß dem keine person zugewiesen wurde), es aber keine p_id=0 in personen gibt. entsprechend soll dann auch kein name ausgegeben werden (weil es keinen gibt), sondern z.b. eben der 0er (welcher dann bedeutet "keine Person zugewiesen"). ich hoffe jetzt ists etwas klarer. Zitat:
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret." Then he pulled the trigger of his BFG9000. |
||
![]() |
![]() |
![]() |
#4 |
Inventar
![]() |
![]() Nunja ohne Stored Procedures bleibt dir eh nichts anderes über als das in einem Programm abzuhandeln
select * from changeform a, services b where a.s_id = b.s_id; select * from changeform a, personen c where a._pid = c.pid; da steht dann eh bei Notfound entweder der entsprechende sqlcode drinn oder es du fragst halt auf NULL ab pong
____________________________________
\"Ein Gewitter reinigt die Luft\", sagte der Mann, nachdem ein Blitz seine Frau erschlug Nicht klicken! Erstposteralarm/Beschwerde/Kummerkasten Verplattet |
![]() |
![]() |
![]() |
#5 |
Gesperrt
Registriert seit: 14.08.2003
Alter: 47
Beiträge: 915
|
![]() |
![]() |
![]() |
![]() |
#6 |
Inventar
![]() Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343
|
![]() danke vielmals für die hilfestellungen. ich habs jetzt über subselects sehr viel einfacher lösen können (ka warum mir das nicht vorher schon eingefallen ist):
Code:
SELECT CF.<alle spalten, die ich haben will>, (SELECT s_name FROM services WHERE s_id=CF.s_id), (SELECT p_name FROM personen WHERE p_id=CF.p_id), FROM changeform CF ; Code:
SELECT CF.<alle spalten, die ich haben will>, (SELECT s_name FROM services WHERE s_id=CF.s_id), IFNULL( (SELECT p_name FROM personen WHERE p_id=CF.p_id), 'keine Person zugewiesen', (SELECT p_name FROM personen WHERE p_id=CF.p_id) ) FROM changeform CF ;
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret." Then he pulled the trigger of his BFG9000. |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|