Kom ihåg mig?
Home Menu

Menu


Hjälp med SQL

Ämnesverktyg Visningsalternativ
Oläst 2009-07-08, 14:45 #1
festizs avatar
festiz festiz är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2004
Inlägg: 302
festiz festiz är inte uppkopplad
Flitig postare
festizs avatar
 
Reg.datum: Jun 2004
Inlägg: 302
Hej!

Jag har två tabeller(väsentligen sparade queries) i access, jag söker en(eller flera i kombination) fråga(or) där jag får ut de PID som har CID i tabell två som matchar alla CID i tabell 1.


Tabell 1 ser ut som såhär:
CID
1
4
5

Tabell 2 ser ut såhär:
PID CID
7 4
7 1
7 5
7 1
8 5
8 1
19 4
19 1
23 4
23 1
28 1
29 1
31 1

Det jag vill är alltså att få ut värdet 7 i PID(personID), detta eftersom det är den enda som representeras i alla relevanta konferenser(CID) Jag försöker få till en intersect mellan CID och CID men att samtidigt få ut PID.. får det inte att fungera.

I mitt huvud borde följande SQL fungera, men det gör det inte.

Kod:
SELECT CID FROM [tabell1]
INTERSECT
SELECT * FROM [tabell2]
It are not working. What is wrong?
festiz är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-07-08, 16:21 #2
eliasson eliasson är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2005
Inlägg: 1 863
eliasson eliasson är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2005
Inlägg: 1 863
LEFT JOIN?
Kod:
SELECT tabell1.* tabell2.* FROM tabell1 LEFT JOIN tabell2 ON tabell1.CID=tabell2.CID
Är inte helt säker på att jag förstod vad du vill göra, för du har med mycket information som antagligen inte är relevant.
eliasson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-07-08, 16:36 #3
rikardottosson rikardottosson är inte uppkopplad
Nykomling
 
Reg.datum: Jul 2009
Inlägg: 25
rikardottosson rikardottosson är inte uppkopplad
Nykomling
 
Reg.datum: Jul 2009
Inlägg: 25
WHERE EXIST() eller WHERE NOT EXIST() då?
rikardottosson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-07-09, 01:35 #4
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Korrekt svar är:

Kod:
SELECT pid, cid 
FROM tabell2 
WHERE cid IN (SELECT cid FROM tabell1)
Subselecten i WHERE satsentar fram en lista på värdena 1,4,5 och sen kommer WHERE-satsen att jämföra cid från tabell2 med denna lista och när det sker en matchning så visas värdet.
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-07-09, 22:40 #5
festizs avatar
festiz festiz är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2004
Inlägg: 302
festiz festiz är inte uppkopplad
Flitig postare
festizs avatar
 
Reg.datum: Jun 2004
Inlägg: 302
Tack allihopa, men tyvärr är alla era svar fel, för jag vill inte ha en resultatrad om "någon" är matchad, utan bara om "alla" är matchade.

i ovan nämnda fall är tabell 1 "SQL-fråga 8 -delfråga 1" o.s.v. Det vart ganska komplicerat till slut...

Huvudfråga
Kod:
SELECT PID FROM [SQL-fråga 8 -delfråga 5], [SQL-fråga 8 -delfråga 4]
WHERE [SQL-fråga 8 -delfråga 5].count=[SQL-fråga 8 -delfråga 4].count;
Delfråga 1
Kod:
SELECT Conference.ID AS CID
FROM Conference, Ämne, ÄmneConference
WHERE Conference.ID=ÄmneConference.Conference And ÄmneConference.Ämne=Ämne.ID And Ämne.Namn='XML'
GROUP BY Conference.ID;
Delfråga 2
Kod:
SELECT Författare.PID, Session.Conference AS CID
FROM Författare, Paper, Klassificering, Ämne, Presentation, [Session], Conference
WHERE Författare.Paper=Paper.ID AND Paper.Klassificering=Klassificering.ID AND Klassificering.Namn='Accepted' AND Paper.Ämne=Ämne.ID AND Ämne.namn='XML' AND Paper.ID=Presentation.PaperID AND Presentation.Session=Session.ID;
Delfråga 3
Kod:
SELECT DISTINCT CID AS dCID, PID
FROM [SQL-fråga 8 -delfråga 2];
Delfråga 4
Kod:
SELECT Count(dCID) AS [count], PID
FROM (SELECT * FROM [SQL-fråga 8 -delfråga 3]) AS [%$##@_Alias]
GROUP BY PID;
Delfråga 5
Kod:
SELECT Count(CID) AS [count]
FROM (SELECT * FROM [SQL-fråga 8 -delfråga 1]) AS [%$##@_Alias];
Om det går att göra enklare, go ahead, make my day. För jag lär mig gärna SQL bättre..
festiz är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-07-10, 00:20 #6
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Är det här bättre (Testkört i Access 2007 och ger enbart 1 tuppel med värdet 7)?

Kod:
SELECT pid

FROM (SELECT pid, count(*) as antal
FROM Tabell2
group by pid)

where antal=(select count(*) from tabell1);
Vi grupperar alla pidarna och räknar hur många olika förekomster det finns, finns alla med borde det bli lika många som count(*) på CIDtabellen....

Även detta är löst med en enkel sub-select som vi lägger i FROM-klausulen så att vi skapar en "virtuell" tabell, vill man kan man hitta på ett alias för den men det var inte nödvändigt i detta relativt enkla fall.

Sub-selecten i WHERE-klausulen är bara till för att räkna raderna i tabell1.

Jag har förutsatt att PID och CID är delar av primärnyckeln i tabell2 (är detta riktigt?) för då är exemplet med data fel.
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 00:37.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017