Permalänk
Medlem

SQL-problem...

Hej!

Jag har lite problem med två SQL-frågor som jag inte lyckas få igång... Jag använder MS Access.

Dessa tabeller har jag:

customers employees meetings orders orderrows

Min första fråga ska egentligen hämta en anställd som har haft möte med två eller färre kunder. Så här långt har jag kommit, men nu får jag endast ut de anställda som har träffat en eller två kunder - inte de anställda som inte har haft något möte än (Dom ska också räknas in).
En delfråga för att räkna:

SELECT COUNT(meetings.meetingid) AS m_count, meetings.employee AS m_employee FROM (employees LEFT OUTER JOIN meetings ON employees.employeeid=meetings.employee) GROUP BY meetings.employee;

Sen frågan för att hämta de anställdas namn:

SELECT employees.name FROM employees, part_query AS pq WHERE employees.employeeid=pq.m_employee AND pq.m_count < 3;

Min andra fråga ska hämta orders som inte har blivit beställda av 'John Doe'.

SELECT orders.name FROM orders, orderrows, meetings, employees WHERE orderrows.orderid=orders.orderid AND meetings.meetingid=orderrows.meetingid AND meetings.employee=employees.employeeid AND NOT employees.name='John Doe';

Jag gissar på att jag måste använda subfrågor, men jag vet inte riktigt hur... Är slut i huvet tror jag.

Hoppas på hjälp.

Vänligen,

Visa signatur

Fame's a bitch, man

Permalänk
Medlem

Re: SQL-problem...

Citat:

Ursprungligen inskrivet av BeWMan
Hej!

Jag har lite problem med två SQL-frågor som jag inte lyckas få igång... Jag använder MS Access.

Dessa tabeller har jag:

customers employees meetings orders orderrows

Min första fråga ska egentligen hämta en anställd som har haft möte med två eller färre kunder. Så här långt har jag kommit, men nu får jag endast ut de anställda som har träffat en eller två kunder - inte de anställda som inte har haft något möte än (Dom ska också räknas in).
En delfråga för att räkna:

SELECT COUNT(meetings.meetingid) AS m_count, meetings.employee AS m_employee FROM (employees LEFT OUTER JOIN meetings ON employees.employeeid=meetings.employee) GROUP BY meetings.employee;

Sen frågan för att hämta de anställdas namn:

SELECT employees.name FROM employees, part_query AS pq WHERE employees.employeeid=pq.m_employee AND pq.m_count < 3;

Min andra fråga ska hämta orders som inte har blivit beställda av 'John Doe'.

SELECT orders.name FROM orders, orderrows, meetings, employees WHERE orderrows.orderid=orders.orderid AND meetings.meetingid=orderrows.meetingid AND meetings.employee=employees.employeeid AND NOT employees.name='John Doe';

Jag gissar på att jag måste använda subfrågor, men jag vet inte riktigt hur... Är slut i huvet tror jag.

Hoppas på hjälp.

Vänligen,

Nu har det gått lite tid och jag antar att du redan löst problemet, men här är lite hjälp ifall så inte är fallet:
Först och främst - du kan använda subfrågor, men jag gillar dem inte.
I din första fråga hade du gjort en left outer join för att få antalet rätt. Samma outer join bör du använda i din namnfråga.
Vad får du för svar från 'John Doe'-frågan som du anser felaktig?

Visa signatur

/ Assar

Permalänk
Medlem

Jag har fortfarande inte löst problemet. Tyvärr. När jag nu testar min andra fråga (John Doe) verkar det bli rätt... Frågan stämmer således, verkar det som.

Första frågan kvarstår. Jag får den ändå inte att fungera.

SELECT employees.name FROM part_query AS pq, (employees LEFT OUTER JOIN meetings ON employees.employeeid=meetings.employee) WHERE employees.employeeid=pq.m_employee AND pq.m_count < 3;

Visa signatur

Fame's a bitch, man

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av BeWMan
Jag har fortfarande inte löst problemet. Tyvärr. När jag nu testar min andra fråga (John Doe) verkar det bli rätt... Frågan stämmer således, verkar det som.

Första frågan kvarstår. Jag får den ändå inte att fungera.

SELECT employees.name FROM part_query AS pq, (employees LEFT OUTER JOIN meetings ON employees.employeeid=meetings.employee) WHERE employees.employeeid=pq.m_employee AND pq.m_count < 3;

Prova:

SELECT employees.name FROM employees LEFT OUTER JOIN part_query AS pq ON employees.employeeid=pq.employeeid, WHERE pq.m_count < 3 or pq.m_count IS NULL;

Jag antar att du har en VIEW som heter part_query och grupperar på employeeid och räknar mötena liknande denna:

create or replace view part_query as SELECT employeeid, count (*) as m_count FROM meetings GROUP BY employeeid;

Edit:
Funkar troligen med detta oxo:

SELECT employees.name FROM employees LEFT OUTER JOIN meetings ON employees.employeeid=meetings .employeeid, WHERE count(*) < 3 GROUP BY employeeid;

Visa signatur

/ Assar

Permalänk
Medlem

f

Visa signatur

Asrock939Dual, AMD64 X2 4400+, MSI 6800GT 256MB, 4x Corsair-VS 512MB 400MHZ, 1x 250GB SATA2, 1x 120GB IDE, 1x 200GB IDE, Hiper 580W

Permalänk
Medlem

linqz: Nödvändigt?

Visa signatur

Äntligen har jag fått svar på om vandrande pinnar kan gäspa. Det kan de inte. Ett av världens stora mysterier är löst.