【问题标题】:I need to SELECT records from a table based on a COUNT function in SQL我需要根据 SQL 中的 COUNT 函数从表中选择记录
【发布时间】:2013-10-29 09:15:32
【问题描述】:

我有四张桌子:

  PAINTING            GALLERY             ARTIST              PAINTED
- PAINTING_TITLE    - GALLERY_ID        - ARTIST_ID         - PAINTED_CODE
- PAINTING_ID       - GALLERY_NAME      - ARTIST_LAST       - ARTIST_ID
                                        - ARTIST_FIRST      - PAINTING_ID

PAINTED 表会记录每位艺术家绘制的画作。有些画是由不止一位艺术家绘制的。 我想返回两位艺术家绘制的画作列表。

SELECT PAINTING.PAINTING_TITLE AS TITLE, 
   GALLERY.GALLERY_NAME AS GALLERY, 
   ARTIST.ARTIST_FIRST AS ARTISTFIRST, 
   ARTIST.ARTIST_LAST AS ARTISTLAST
FROM PAINTING, GALLERY, PAINTED, ARTIST
WHERE PAINTING.GALLERY_ID = GALLERY.GALLERY_ID
AND PAINTING.PAINTING_ID = PAINTED.PAINTING_ID
AND ARTIST.ARTIST_ID = PAINTED.ARTIST_ID
AND (SELECT COUNT(*) FROM PAINTED, PAINTING, ARTIST
WHERE PAINTING.GALLERY_ID = GALLERY.GALLERY_ID
AND PAINTING.PAINTING_ID = PAINTED.PAINTING_ID
AND ARTIST.ARTIST_ID = PAINTED.ARTIST_ID) = 2;

这不会返回我需要的结果。你对如何只选择有两位艺术家的画作有什么想法吗?

我正在使用 Access SQL,任何帮助将不胜感激。

【问题讨论】:

    标签: sql select count


    【解决方案1】:

    使用GROUP BY 而不是内部SELECT

    SELECT
        PAINTING.PAINTING_TITLE AS TITLE, 
        GALLERY.GALLERY_NAME AS GALLERY
    FROM
        PAINTING,
        GALLERY,
        PAINTED
    WHERE
            PAINTING.GALLERY_ID = GALLERY.GALLERY_ID
        AND
            PAINTING.PAINTING_ID = PAINTED.PAINTING_ID
    GROUP BY
        PAINTING.PAINTING_TITLE,
        GALLERY.GALLERY_NAME
    HAVING
        COUNT(PAINTED.ARTIST_ID) = 2
    

    【讨论】:

    • 我不是 Access SQL 方面的专家……但不应该把这个条件移到 having 子句中吗?
    • @canon 当然应该。很好发现。
    • 不错的解决方案,但它没有在画作旁边列出艺术家的名字。你知道我怎样才能让这方面发挥作用吗?
    猜你喜欢
    • 2011-05-02
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 2011-10-31
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    相关资源
    最近更新 更多