WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   SQL statement (http://www.wcm.at/forum/showthread.php?t=147364)

pc.net 13.10.2004 14:14

und wie wärs mit einem sub-select?
Code:

select distinct tab1.sBsArNr
from t1 tab1
where 1 < (select count(1)
          from t1 tab2
          where tab2.sBsArNr = tab1.sBsArNr)
;

und wenn man die anzahl der vorkommen auch noch wissen will, dann so:
Code:

select tab1.sBsArNr,
            count(tab1.sBsArNr)
from t1 tab1
where 1 < (select count(1)
          from t1 tab2
          where tab2.sBsArNr = tab1.sBsArNr)
group by tab1.sBsArNr
;


JackLemon 13.10.2004 14:31

keine chance, mein statement ist abzüglich whitespaces um 1/3 kürzer. wir müssen doch auch an den speicherplatz denken!!

käptn 13.10.2004 15:40

Wo liegt das Problem? ;)

Code:

SELECT
  *, COUNT(*) AS anzahl
FROM
  t1
GROUP BY
  sBsArNr
HAVING
  anzahl > 1

~

JackLemon 13.10.2004 16:26

'tschuldigung, vielleicht steh' ich jetzt auf der leitung, aber mit

SELECT *, COUNT(*) AS anzahl

bekommst du doch alle tabellenfelder + das anzahl-feld. gut. das anzahl-feld wird durch GROUP BY() in die aggregatfunktion eingeschlossen. aber alle anderen felder sind imho _kein_ teil der aggregatfunktion. wie soll denn das bitte funktionieren??

und wenn's dich interessiert, mein sql-server kann das nicht mal kompilieren: "ungültiger spaltenname 'anzahl'"... (hab das ganze klarerweise auf eine passende datenstruktur bei mir umgeändert)

:heul:

pc.net 13.10.2004 17:59

Zitat:

Original geschrieben von JackLemon
keine chance, mein statement ist abzüglich whitespaces um 1/3 kürzer. wir müssen doch auch an den speicherplatz denken!!
tjo ... mit einer ordentlich oracle-db macht das auch bei mehreren millionen datensätzen kein problem :D

käptn 13.10.2004 18:59

Man (Jack) gehe auf das 1. Post und lese es genau durch.
Weiters passe man den SQL Dialekt an sein RDBMS an oder nehme pc.net's Sub-Select Lösung. ;)

Code:

SELECT
  *
FROM
  t1
GROUP BY
  sBsArNr
HAVING
  COUNT(*) > 1

Dat iss jet aber unjetestet! :)

~

JackLemon 13.10.2004 21:44

isses nicht, käptn.

und wenn du mir nicht glaubst versuch's doch einfach. mysql frisst es, gibt aber nur eine einzige row pro n matches raus. was ja kaum das ziel sein wird - wenn er doppelte artikelnummern "bekämpfen" möchte dann wird er wohl alle rows brauchen die dieselbe artnr enthalten und nicht nur eine. das macht im übrigen auch der php-code im ersten post...

der mssql (um den es hier geht!) kompiliert es wieder nicht, weil er - wie ich schon angemerkt habe - der meinung ist dass die restlichen felder des selects ("*") in keiner aggregatfunktion inkludiert sind. und würdest du ihm alle felder explizit hinschreiben müsstest du sie trotzdem irgendwie aggregieren, mit SUM() oder COUNT() oder FIRST() oder sonstwas und das passt dann erst wieder nicht (->mysql-ergebnis).

kann es sein dass dein code nur mit oracle, version 7.1i-beta13 built-56 funktioniert? :D

wie dem auch sei, ein toter thread. reichr, halt dich an pc.net's subselect ;)

käptn 14.10.2004 10:36

Mea cupla :rolleyes: Was verwirrst mich auch so? :D

~


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:25 Uhr.

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