2011-11-02 3 views
1

좋은 아침/오후를 읽을 수 없습니다 내 SQL, MS 액세스는 다음

내가 아주 간단한 MS 액세스 DB가 나는 MS 액세스가 IT에 손을의 얻을 때까지 잘 작동하는 쿼리를 변경 유지 더 읽을 수없는 "읽기 쉽도록"만듭니다. 이 쿼리입니다 :

SELECT Checkout.* 
FROM Checkout, (SELECT seatNumber, MAX(dateOut) AS lastOut FROM Checkout GROUP BY seatNumber) AS resultTable 
WHERE Checkout.seatNumber=resultTable.seatNumber And resultTable.lastOut=Checkout.dateOut; 

그리고 이것은 액세스로를 미치게 무엇입니까 :

SELECT Checkout.* 
FROM Checkout, [SELECT seatNumber, MAX(dateOut) AS lastOut FROM Checkout GROUP BY seatNumber; ] AS resultTable 
WHERE Checkout.seatNumber=resultTable.seatNumber And resultTable.lastOut=Checkout.dateOut; 

그리고는 테이블을 찾을 수 없습니다에 전달한다.

나는 MS Access가 너무 도움이되는 것을 막을 수있는 방법이 없다는 것을 알고 있습니다.하지만 누군가가 쿼리의 재 작업을 도울 수 있는지 궁금합니다. 나는 일을하는 방식으로 일종의 설정을하고 일을하지 않으면 그걸 벗어나기가 어렵습니다. 나는 신선하고 아마도 훨씬 더 경험 많은 눈이 나를 도울 수 있기를 바랐다.

대단히 감사합니다.

+1

MS Access에서 그래픽으로 쿼리를 작성하고 편집 해 보셨습니까? MS Access의 SQL을 편집하는 데는 몇 가지 위험이 있습니다. 그래픽 방식은 약간의 지루함이 있습니다. 아마도 "요약"유형의 쿼리를 독립적 인 쿼리 resultTable로 생성 한 다음 테이블 Checkout에 참여시켜야하기 때문입니다. – hardmath

답변

3

일반적으로 resultTable과 같은 내부 테이블 논리를 별도의 VIEW (MS Access 용어로는 QUERY)로 캡슐화합니다. 그렇게하면 쿼리에서 문제없이 참조 할 수 있어야합니다.

또한 액세스에 의해 엉망이되지해야

SELECT * FROM Checkout C1 
WHERE NOT EXISTS (SELECT * FROM CheckOut C2 
    WHERE C2.seatNumber = C1.seatNumber AND C2.dateOut > C1.dateOut); 

으로 이러한 종류의 쿼리를 작성할 수 있습니다. 당신이 이제까지 생산자 진 와일더의에 말을 제로 모 스텔의 문자가 마지막에 법정 장면 거기에 영화 본 적이 있다면

"레오! 나에게 도움이되지 않습니다를!" 나는 MS 오피스를 사용할 때 같은 것을 자주 말하고있다.

+0

감사합니다 래리, 나는 깔끔하고 더 많은 쿼리가 나에게 지저분 해 보이는 모든 것처럼 다른 이유없이 별도의 쿼리를 작성하지 않아도되도록 노력했습니다. 나는 아마이 특별한 강요를 놓아 줘야한다. 그러나 헤이 ∥ 우리 모두는 우리 버릇을 가지고있다. 재 작업에 감사드립니다. 이제는 어떻게 작동하는지 알아낼 수 있도록 모든 부분을 떼어 놓으 려합니다. 오, 내가 MS 오피스에서 항상 도움을받지 못하게되면, 나는 옳을 것이다. 나는 영화를 보지 못했지만 나는 느낀다. – bwri1407

+0

들었지만, 애플리케이션의 다른 곳에서 동일한 내부 테이블 로직을 사용한다면 DRY 원칙을 위반하고 중간 뷰를 사용하는 것이 좋습니다. –

+0

단지 변화 래리 제안 (주관적 가독성) SELECT * FROM 지갑 C1 같은 WHERE C1.dateOut = (C2 같이 지갑 FROM MAX (dateOut)을 선택 WHERE C2.seatNumber = C1.seatNumber) – Yarik

0

Access가 실행되어 Northwind.mdb 복사본에 대해 Access 2010에서 다음 쿼리를 실행했지만 자동으로 수정되지 않았습니다. 어떤 버전의 Access를 사용하고 있습니까?

SELECT orders.* 
from orders, (select orderid, max(quantity) as maxq from [order details] group by orderid) as results 
where orders.orderid = results.orderid 
+0

나는 2003 년을 사용 중이며 메뉴에서 쿼리를 열 때만 망가 뜨린다. 실제 쿼리에서 실행하면 제대로 동작한다. 실제로 처음에 실제로 작동한다는 것을 알았다. 메뉴에서 실행하지 않으면 VBA와 같은 다른 영역에서 쿼리 테이블을 잘 사용할 수 있습니다. – bwri1407

관련 문제