webForumDet fria alternativet

Sql-fråga...

5 svar · 744 visningar · startad av freddyk

freddykMedlem sedan okt. 2006103 inlägg
#1

Hallå SQLare,

Behöver er hjälp med något rätt basic, kan jag tänka. Vill få fram de faser som inte är kopplade till ett visst projekt dvs de faser som inte har en koppling till projekt i tabellen projektFas.

Jag har 3 tabeller. Tabell Projekt (pk projID), tabell Fas (pk fasID) och tabell projektFas (pk projID och fasID).

Jag vill få fram de faser som inte är kopplade till projID.

Följande SQL har jag:

	SELECT dbo.malte_projekt_fas.fasID,dbo.malte_projekt_fas.fasNamn,dbo.malte_projekt_fas.fasBeskr,dbo.malte_projekt_fas.fasUnik
	FROM dbo.malte_projekt_fas
		INNER JOIN dbo.malte_projekt_projektFas ON dbo.malte_projekt_projektFas.projektFasID = dbo.malte_projekt_fas.fasID
	WHERE dbo.malte_projekt_fas.fasUnik = 'False' AND dbo.malte_projekt_projektFas.projektID <> @projid

Detta visar de faser som är kopplade till andra projektID även om dessa faser är kopplade till det projektID jag skickar in i @projID. Detta vill jag undvika. Vill endast ha ut de faser som är kopplade till andra projektID och som inte är kopplade till inkommande @projID över huvud taget.

Några förslag på hur jag kan modifiera SQLen?

Tack på förhand.

Använder SQL server 2005.

LarsGMedlem sedan dec. 200012 464 inlägg
#2
select * 
 from fas
 where not exists
  (select *
      from projektfas
     where fas.fasid = projektfas.fasid
       and projid = @projid)
freddykMedlem sedan okt. 2006103 inlägg
#3

Super!

Tack LarsG!

freddykMedlem sedan okt. 2006103 inlägg
#4

Behöver hjälp med ytterligare en NOT EXISTS

Varför får jag inte fram ngt resultat i nedanstående fråga? Frågorna var för sig går bra men ihop blir det nada. Tacksam för hjälp. :)

Nedanstående ska ta fram de anställda som inte finns med i checklistaRadAnstalld med sitt ID och visa dem.

Första select-delen får fram alla anställda den andra de anställda med radID = 1. Fungerar som sagt var för sig men ihop blir det noll. Vill ha fram de anställda som inte kommer fram i andra select-satsen.

SELECT DISTINCT anstID
FROM         dbo.malte_grund_anstalld
WHERE     (NOT EXISTS
                          (SELECT DISTINCT anstalldID
                            FROM          dbo.malte_kt_projekt_checklistaRadAnstalld
                            WHERE      (checklistaRadID = '1')))
LarsGMedlem sedan dec. 200012 464 inlägg
#5

Du har ingen villkor mellan tabellerna. Om det finns någon i malte_kt_projekt_checklistaRadAnstalld som uppfyller villkoret checklistaRadID = 1
så får du alla poster i malte_grund_anstalld. Att ange distinct i en subfråga är onödigt.

SELECT anstID
FROM    dbo.malte_grund_anstalld mga
WHERE  NOT EXISTS
         (SELECT *
            FROM  dbo.malte_kt_projekt_checklistaRadAnstalld mpc
          WHERE mga.anstID =  mpc.anstalldID
              and checklistaRadID = 1)
freddykMedlem sedan okt. 2006103 inlägg
#6

Det är ju klart! Tack LarsG. Det tiltar ibland (o inte så sällan heller) ;)

130 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)