brauch hilfe bei mySQL
gonzoMD
- datenbank
0 Karl Jansen0 Ilja0 _King Lully
Hab hier ne Query, und dazu die eine oder andere Frage:
SELECT
journal.VRENUM,
journal.KUN_NAME1,
journal.KUN_NAME2,
journal.KUN_NAME3,
journal.INFO
FROM
journal
INNER JOIN journalpos ON (journal.REC_ID = journalpos.JOURNAL_ID)
INNER JOIN artikel ON (journalpos.ARTIKEL_ID = artikel.REC_ID)
WHERE
(journal.QUELLE = 3) AND
(journal.INFO IS NOT NULL) AND
(journal.INFO) AND
(journal.INFO NOT LIKE '%vers%') AND
(journal.INFO NOT LIKE '%storn%') AND
(artikel.MENGE_AKT >= 0) AND
(journal.VRENUM NOT LIKE '%STORNO%') AND
((journal.SHOP_STATUS = 1) OR
(journal.SHOP_STATUS = 2))
GROUP BY
journal.vrenum
Ich möchte hier alle rechnungen (offen oder in Bearbeitung - SHOP_STATUS)ausgebeh (journal), wo einzelne Artikel (journalpos) auch vorhanden oder = 0 sind(MENGE_AKT >=0). Funktioniert so weit, bis auf dass ich das Problem habe, dass durch die Where Klausel
(artikel.MENGE_AKT >= 0)
nicht die journale, sondern die journalpos ausgeschlossen wurden, und demzufolge die 'fehlerhaften' journale trotzdem angezeigt werden.
habs schon mit DISTINCT versuch, hat aber nicht geklappt.
Ich will an der Datenban nichts verändern da ich lediglich ein Frontend dafür entwerfe. (DB: CAO Faktura - falls irgendwer das kennt)
Versuche anstatt die Tabelle Artikel komplett einzubinden im Frameblock einen Select-Block einzubinen, in dem du dann auch die Where-Klausel 'MENGE_AKT > 0' angeben kannst. Damit verhinderst du das diese WHERE-Klausel im Hauptselect zu Problemen führst:
INNER JOIN (SELECT ... FROM ARTIKEL WHERE MENGE_AKT >= 0) Art on (...)
Hab hier ne Query, und dazu die eine oder andere Frage:
SELECT
journal.VRENUM,
journal.KUN_NAME1,
journal.KUN_NAME2,
journal.KUN_NAME3,
journal.INFO
FROM
journal
INNER JOIN journalpos ON (journal.REC_ID = journalpos.JOURNAL_ID)
INNER JOIN artikel ON (journalpos.ARTIKEL_ID = artikel.REC_ID)
WHERE
(journal.QUELLE = 3) AND
(journal.INFO IS NOT NULL) AND
(journal.INFO) AND
(journal.INFO NOT LIKE '%vers%') AND
(journal.INFO NOT LIKE '%storn%') AND
(artikel.MENGE_AKT >= 0) AND
(journal.VRENUM NOT LIKE '%STORNO%') AND
((journal.SHOP_STATUS = 1) OR
(journal.SHOP_STATUS = 2))
GROUP BY
journal.vrenum
SELECT
journal
.VRENUM,
journal
.KUN_NAME1,
journal
.KUN_NAME2,
journal
.KUN_NAME3,
journal
.INFO
FROM
journalpos
INNER JOIN journal
ON (journalpos
.JOURNAL_ID = journal
.REC_ID)
INNER JOIN (SELECT artikel.REC_ID FROM ARTIKEL WHERE MENGE_AKT >= 0) on (journalpos
.ARTIKEL_ID = artikel
.REC_ID)
WHERE
(journal
.QUELLE = 3) AND
(journal
.INFO IS NOT NULL) AND
(journal
.INFO >= '') AND
(journal
.INFO NOT LIKE '%vers%') AND
(journal
.INFO NOT LIKE '%storn%') AND
(artikel
.MENGE_AKT >= 0) AND
(journal
.VRENUM NOT LIKE '%STORNO%') AND
((journal
.SHOP_STATUS = 1) OR
(journal
.SHOP_STATUS = 2))
GROUP BY VRENUM;
hab das so gemacht, krieg aber ne Fehlermeldung:
You have an error in your SQL syntax near '(SELECT artikel.REC_ID FROM ARTIKEL WHERE MENGE_AKT >= 0) artikel on (`journalp' at line 10
Danke für die Hilfe!!!
yo,
zum einen solltest du nur die spalten ausgeben, über die du auch gruppiert hast, nur mysql gibt hierbei keine fehlmeldung aus. zum anderen hast du unnötige klammern gesetzt.
SELECT
journal.VRENUM,
journal.KUN_NAME1,
journal.KUN_NAME2,
journal.KUN_NAME3,
journal.INFO
FROM
journal
INNER JOIN journalpos ON (journal.REC_ID = journalpos.JOURNAL_ID)
INNER JOIN artikel ON (journalpos.ARTIKEL_ID = artikel.REC_ID)
WHERE
journal.QUELLE = 3 AND
journal.INFO IS NOT NULL AND <-- diese anweisung ist eventuell überflüssig
journal.INFO AND <--- hier fehlt doch was ???
journal.INFO NOT LIKE '%vers%' AND
journal.INFO NOT LIKE '%storn%' AND
artikel.MENGE_AKT >= 0 AND
journal.VRENUM NOT LIKE '%STORNO%' AND
journal.SHOP_STATUS IN (1, 2)
GROUP BY
journal.vrenum
journal.KUN_NAME1,
journal.KUN_NAME2,
journal.KUN_NAME3,
journal.INFO
habe deine anweisung erst mal ein wenig umgeschrieben, bzw. kommentiert. was du genau willst, ist mir leider noch nicht ganz klar.
Ilja
SELECT
journal.VRENUM,
journal.KUN_NAME1,
journal.KUN_NAME2,
journal.KUN_NAME3,
journal.INFO
FROM
journal
INNER JOIN journalpos ON (journal.REC_ID = journalpos.JOURNAL_ID)
INNER JOIN artikel ON (journalpos.ARTIKEL_ID = artikel.REC_ID)
WHEREjournal.QUELLE = 3 AND
journal.INFO IS NOT NULL AND <-- diese anweisung ist eventuell überflüssig
journal.INFO AND <--- hier fehlt doch was ???
journal.INFO NOT LIKE '%vers%' AND
journal.INFO NOT LIKE '%storn%' AND
artikel.MENGE_AKT >= 0 AND
journal.VRENUM NOT LIKE '%STORNO%' AND
journal.SHOP_STATUS IN (1, 2)
GROUP BY
journal.vrenum
journal.KUN_NAME1,
journal.KUN_NAME2,
journal.KUN_NAME3,
journal.INFO
so bekomm ich nur die selben Ergebnisse, wie vorher.
Also, wie ich die Verknüpfungen habe siehst du ja die MENGE_AKT in den Artikel bezieht zich durch die ID ja auf die Journalpositionen, Wenn ich diese WHERE Klausel >=0 benutze werden die Journalpositionen herausgefiltert,(bemerkt man nur wenn man nicht gruppiert), ich will aber, dass dann das komplette Journal herausgefiltert wird. (Ein Journal ist eine Rechnung, und Ein Journalpos ist ein Artikel innerhalb der Rechnung. (Unterabfrage, aber Wie?)
yo,
so bekomm ich nur die selben Ergebnisse, wie vorher.
klar, habe ja erst einmal dir tipps gegeben, was mir so aufgefallen ist. was genau du mit deiner abfrage haben willst, konnte ich leider immer noch nicht verstehen.
Also, wie ich die Verknüpfungen habe siehst du ja die MENGE_AKT in den Artikel bezieht zich durch die ID ja auf die Journalpositionen
grundsätzlichhabe ich hier ein verständnisproblem. die spalten MENGE_AKT schließt datensätze in der tabelle artikel aus. dadurch, dass du einen inner join mit den anderen tabellen bildest, wirkt sich das natürlich auf die ergebnismenge aus. aber das ist nicht zwangsläufig so.
Wenn ich diese WHERE Klausel >=0 benutze werden die Journalpositionen herausgefiltert,(bemerkt man nur wenn man nicht gruppiert), ich will aber, dass dann das komplette Journal herausgefiltert wird.
wie gesagt, diese aussagen verstehe ich leider noch nicht. aber versuch mal zu erklären, was du willst, ohne auf die abfrage einzugehen. vielleicht wird es dann klarer.
Ilja
Bevor da weitergemurkst wird:
Nicht schlecht wäre es, wenn Du Datentabellen ggf. incl. Beschreibung einzelner Datenfelder lieferst und dann die gewünschte Abfrage möglichst präzise beschreibst und zudem das Problem isolierst, also den Punkt benennst, wo es ungewollt oder gar nicht mehr funzt. (Dabei gehen wir davon aus, dass die Abfrage substantiell in Ordnung ist, also Teilergebnisse liefert. Sollte das nicht der Fall sein, auch das bitte angeben.)
Es lohnt sich bei solchen Problemen meist ein wenig Zeit in die genaue Problemschreibung zu investieren.