php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 15-03-2010, 20:52
glob
 Registrierter Benutzer
Links : Onlinestatus : glob ist offline
Registriert seit: Mar 2010
Beiträge: 5
glob befindet sich auf einem aufstrebenden Ast
Standard Sql join

Also ich verzweifle brauche einen Outer join

Datenbank ORACLE:-(

Tabelle 1 Mitarbeiter mit MA_NR VON_DTM und BIS_DTM

Tabelle 2 LAGER mit MA_NR,LAGER_NR, VON_DTM und BIS_DTM

Daten
Es sind ca 60 vorhande Mitarbeiter da aber nur 30 haben ein Lager!

Ich will nur gültige Mitarbeiter sehen und falls ein Lager vorhanden ist die Lager_NR dazu.

Mein Select
Code:
select Mitarbeiter.*, LAGER.LAGER_NR  from LAGER, Mitarbeiter
where LAGER.LAGER_NR = Mitarbeiter.LAGER_NR(+)
and sysdate between Mitarbeiter.VON_DTM AND Mitarbeiter.BIS_DTM
and sysdate between LAGER.VON_DTM AND LAGER.BIS_DTM
Bekomme aber nur die 30 Mitarbeiter raus die auch ein Lager haben:-(



Wie mache ich das richtig mit einem outerjoin?

DANKE!

Geändert von glob (15-03-2010 um 21:12 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 15-03-2010, 20:59
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

du liest bitte die Forenregeln, passt deinen Beitrag entsprechend an und dann liest du dir einfach durch, wie es geht und wendest das dort gelernte auf deine Abfrage an, statt mit Komma und Where (Theta-Style-Join) zu arbeiten.

Bei weiteren und konkreteren Fragen helfen wir gerne weiter.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #3 (permalink)  
Alt 15-03-2010, 21:31
glob
 Registrierter Benutzer
Links : Onlinestatus : glob ist offline
Registriert seit: Mar 2010
Beiträge: 5
glob befindet sich auf einem aufstrebenden Ast
Standard

Code:
 SELECT mitarbeiter.*, 
       lager.lager_nr 
FROM   mitarbeiter 
       RIGHT JOIN lager 
         ON mitarbeiter.id = lager.lager_nr 
            AND sysdate BETWEEN mitarbeiter.von_dtm AND mitarbeiter.bis_dtm 
            AND sysdate BETWEEN lager.von_dtm AND lager.bis_dtm 
Kann den leider im Moment nicht überprüfen aber für mich ist es immer noch der gleiche sql Befehl?
Mit Zitat antworten
  #4 (permalink)  
Alt 16-03-2010, 08:34
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

ich glaube, dass du LEFT JOIN brauchst.
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #5 (permalink)  
Alt 16-03-2010, 09:15
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von glob Beitrag anzeigen
Code:
ON mitarbeiter.id = lager.lager_nr
Ich hoffe, hier hast du dich vertan und sprichst deine Mitarbeiter nicht mit der Nummer des Lagerplatzes an, auf dem du sie einsperrst. Das ist nämlich verboten und erwiesenermaßen motivationssenkend

Als ich sagte "ohne Komma und Where", meinte ich damit nicht, dass du die Where-Klausel ganz ersetzen sollst. Sie ist natürlich immer noch dazu da, die Datensätze im Ergebnis rauszufiltern, die man wirklich haben will. Die on-Klausel dagegen legt die Bedingungen fest, unter denen zwei zu joinende Datensätze kombiniert werden dürfen.

Deine sysdate-Vergleiche haben den Anschein, als gehörten sie in die Where-Klausel.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #6 (permalink)  
Alt 16-03-2010, 17:28
glob
 Registrierter Benutzer
Links : Onlinestatus : glob ist offline
Registriert seit: Mar 2010
Beiträge: 5
glob befindet sich auf einem aufstrebenden Ast
Standard

War schon zu spät gestern.^^

Code:
 SELECT mitarbeiter.*, 
       lager.lager_nr 
FROM   mitarbeiter 
       LEFT JOIN lager 
         ON mitarbeiter.id = lager.Mitarbeiter_nr 
            WHERE sysdate BETWEEN mitarbeiter.von_dtm AND mitarbeiter.bis_dtm 
            AND sysdate BETWEEN lager.von_dtm AND lager.bis_dtm 
Bei dem Select zeigt er leider immer noch alle Mitarbeiter an auch die ungültigen Sätze:-(

Und ka das Ergebnis ist anders aber für mich ich da kein unterschied zu meinem ersten select.

Geändert von glob (16-03-2010 um 20:23 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 16-03-2010, 23:07
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

zu welcher tabelle gehört sysdate?
__________________
Slava
bituniverse.com

Geändert von Slava (16-03-2010 um 23:13 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 16-03-2010, 23:49
glob
 Registrierter Benutzer
Links : Onlinestatus : glob ist offline
Registriert seit: Mar 2010
Beiträge: 5
glob befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Slava Beitrag anzeigen
zu welcher tabelle gehört sysdate?
SYSDATE ist einfach nur das Datum von heute.
Mit Zitat antworten
  #9 (permalink)  
Alt 17-03-2010, 10:41
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

ups, ich habe vergessen dass du mit ORACLE arbeitest.
Ich kann es leider nicht testen, probiere es so
Code:
select m.*, l.lager_nr
 from (select * from mitarbeiter where sysdate BETWEEN mitarbeiter.von_dtm AND mitarbeiter.bis_dtm) as m 
left join (select lager_nr,Mitarbeiter_nr from lager  where sysdate BETWEEN lager.von_dtm AND lager.bis_dtm) as l on m.id=l.Mitarbeiter_nr
__________________
Slava
bituniverse.com

Geändert von Slava (17-03-2010 um 10:54 Uhr)
Mit Zitat antworten
  #10 (permalink)  
Alt 19-03-2010, 19:12
glob
 Registrierter Benutzer
Links : Onlinestatus : glob ist offline
Registriert seit: Mar 2010
Beiträge: 5
glob befindet sich auf einem aufstrebenden Ast
Standard

Der geht Danke!!!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
LEFT JOIN ohne JOIN prego SQL / Datenbanken 10 19-11-2009 11:21
[LEFT JOIN] Weiteres Left Join Anhängen mit Sortierfunktion Laire SQL / Datenbanken 3 11-01-2008 09:38
[SQL JOIN] Join mit zählen in einer anderen Tabelle tontechniker SQL / Datenbanken 1 19-05-2006 11:03
JOIN *ugh* paddy SQL / Datenbanken 10 31-01-2004 17:05
Inner Join und Outer Join newhx SQL / Datenbanken 1 11-02-2002 22:28

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

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