Can you solve this simple SQL query?

后端 未结 3 826
伪装坚强ぢ
伪装坚强ぢ 2021-01-14 20:31

Suppose it\'s a website that sells photo cameras. Here are my entities (tables):

Camera: A simple camera
Feature: A feature like: 6mp, max resolution 1024x76         


        
相关标签:
3条回答
  • 2021-01-14 20:50
    SELECT camera.id
    FROM camera JOIN camera_features ON camera.id=camera_features.camera_id
    GROUP BY camera.id
    HAVING sum(camera_features.feature_id IN (1,2,3))=3
    

    3 is the number of features in (1,2,3). And assuming (camera_id,feature_id) is unique in camera_features.

    0 讨论(0)
  • 2021-01-14 20:50

    This is easiest to generalise by putting the search values into a table...

    INSERT INTO search SELECT 1
             UNION ALL SELECT 2
             UNION ALL SELECT 3
    
    SELECT
      camera_features.camera_id
    FROM
      camera_features
    INNER JOIN
      search
        ON search.id = camera_features.feature_id
    GROUP BY
      camera_features.camera_id
    HAVING
      COUNT(DISTINCT camera_features.feature_id) = (SELECT COUNT(DISTINCT id) FROM search)
    
    0 讨论(0)
  • 2021-01-14 20:51
    SELECT DISTINCT Camera.*
    FROM Camera c
         INNER JOIN cameras_features fc1 ON c.id = fc1.camera_id AND fc1.feature_id = 1
         INNER JOIN cameras_features fc2 ON c.id = fc2.camera_id AND fc2.feature_id = 2
    

    What is happening here is that cameras will be filtered down to cameras with feature 1, then within this group, the cameras are gonna be filtered down to the ones with feature 2

    0 讨论(0)
提交回复
热议问题