Разумный SQL - PullRequest
       1

Разумный SQL

3 голосов
/ 05 мая 2011

Я пытался ответить на вопросы, найденные на http://www.sql -ex.ru / learn_exercises.php # answer_ref недавно, так как я новичок в sql, как вы можете видеть из моих предыдущих сообщений относительно SQL. Я через этот вопрос:

Упражнение: 23 Найдите производителей, которые производят как минимум ПК с частотой не менее 750 МГц и ноутбук с частотой не менее 750 МГц. Набор результатов: Maker

Ниже приведен мой ответ, который является неправильным, поскольку он использует или. Кто-нибудь может направить меня в правильном направлении, дав мне ссылку, где искать или какое объединение я должен использовать.

  SELECT pt.maker    
    FROM product pt, 
         laptop l, 
         pc    
   WHERE (pt.model = pc.model 
     AND pc.speed >=750) 
      OR (pt.model = l.model 
     AND l.speed >=750)
GROUP BY pt.maker

Ответы [ 3 ]

4 голосов
/ 05 мая 2011

Предполагается, что INTERSECT поддерживается:

SELECT  maker
FROM    product p
JOIN    laptop l
ON      l.model = p.model
WHERE   speed >= 750
INTERSECT
SELECT  maker
FROM    product p
JOIN    pc
ON      pc.model = p.model
WHERE   speed >= 750

Кроссплатформенность:

SELECT  maker
FROM    (
        SELECT  maker, 1 AS source
        FROM    product p
        JOIN    laptop l
        ON      l.model = p.model
        WHERE   speed >= 750
        UNION
        SELECT  maker, 2 AS source
        FROM    product p
        JOIN    pc
        ON      pc.model = p.model
        WHERE   speed >= 750
        ) q
GROUP BY
        maker
HAVING  COUNT(*) = 2
3 голосов
/ 05 мая 2011

Закройте, если определения таблиц и столбцов верны (у меня нет логина для этого сайта), это должно быть что-то вроде:

SELECT distinct pt_pc.maker
FROM  
  laptop l 
    inner join product pt_l on pt_l.model=l.model, 
  pc
    inner join product pt_pc on pt_pc.model=pc.model
WHERE pc.speed >=750 and l.speed >=750 and pt_l.maker=pt_pc.maker

, поэтому в основном вам нужен один компьютер со скоростью>= 750 и один ноутбук со скоростью> = 750, сделанные одним и тем же парнем.

0 голосов
/ 13 июля 2014
SELECT DISTINCT maker 
FROM product 
WHERE   maker IN (SELECT DISTINCT maker 
                  FROM product AS a 
                  INNER JOIN (SELECT DISTINCT model 
                              FROM pc 
                              WHERE speed>=750) AS b  ON a.model=b.model)
        AND maker IN (SELECT DISTINCT maker 
                      FROM product AS a 
                      INNER JOIN (SELECT DISTINCT model 
                                  FROM laptop 
                                  WHERE speed>=750) AS b ON a.model=b.model)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...