我该怎么做这个SQL查询?

时间:2009-09-23 16:37:20

标签: sql

我正在学习SQL,但我遇到了查询问题。

我有以下表格:

  

[笔记本电脑]
  价格
  模特

     

[pc]
  价格
  模型
  速度

     

[打印机]
  价格
  模型
  颜色

     

[产品]
  模型
  机

如何编写一个能够返回由制造商“A”制作的任何产品的型号和价格的查询?

我遇到问题因为笔记本电脑,个人电脑和打印机都有“型号”和“价格”,所以如何根据制造商在“产品”表中的条件选择它们?

4 个答案:

答案 0 :(得分:3)

SELECT * FROM
(
    SELECT model,price FROM laptop
    UNION ALL
    SELECT model,price FROM pc
    UNION ALL
    SELECT model,price FROM printer
) all_items
INNER JOIN product p ON all_items.model = p.model
WHERE p.maker = 'A'

您不必将条件放在三个地方。只在最后。

答案 1 :(得分:1)

您可以UNION结果

SELECT 
    l.model,
    l.price
FROM
    laptop l
INNER JOIN
    product p
    ON
    l.model = p.model    
WHERE
    p.maker = 'A'

UNION ALL

SELECT 
    pc.model,
    pc.price
FROM
    pc pc
INNER JOIN
    product p
    ON
    l.model = p.model    
WHERE
    p.maker = 'A'

UNION ALL

SELECT 
    pr.model,
    pr.price
FROM
    printer pr
INNER JOIN
    product p
    ON
    l.model = p.model    
WHERE
    p.maker = 'A'

答案 2 :(得分:1)

SELECT T.model, T.price
FROM (SELECT model, price FROM laptop
      UNION ALL
      SELECT model, price FROM pc
      UNION ALL
      SELECT model, price FROM printer) T
     JOIN product p ON p.model = T.model
WHERE p.maker = 'A'

答案 3 :(得分:0)

我认为你的表结构需要重建和规范化...使用正确的结构你可以正确获取结果和效率。 我认为你桌子的正确结构是:

table: Product
  id
  name
  .
  .
  price

table: ProductFeature
   attribute
   value
   product_id

在第一个表中存储所有具有公共属性的产品,在第二个表中,您可以使用forign键存储其他功能,如颜色,速度等....