2009-09-23 3 views
0

Я изучаю SQL, и у меня возникают проблемы с запросом.Как это сделать SQL-запрос?

У меня есть следующие таблицы:

[ноутбук]
цена
модель

[шт]
цена
модель
скорость

[Принтер]
цена
модель
цвета

[продукт]
модели
производитель

Как я могу написать запрос, который будет возвращать модель и цену любого продукта, который производится с помощью производителя «A» ?

У меня возникли проблемы, потому что у ноутбуков, ПК и принтеров есть «модель» и «цена», так как я могу выбрать их на основе условий их создателя в таблице «Продукт»?

+1

Возможно, вам стоит подумать о том, чтобы объединить ваши компьютеры, компьютеры и ноутбуки, в общую таблицу. Особенно общие поля (например, цена и модель). Для необычных полей (например, скорость для ПК и цвет для принтеров) я являюсь поклонником использования параметрической базы данных. –

ответ

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

Вы можете 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' 
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' 
0

Я думаю, что ваша структура таблицы нуждается в перестройке и нормализации ... с правильной структурой вы можете получить результат правильно и эффективно. я считаю, что правильная структура для таблицы:

table: Product 
    id 
    name 
    . 
    . 
    price 

table: ProductFeature 
    attribute 
    value 
    product_id 

в первой таблице магазине всего ваш продукт с общим атрибутом, а во второй таблице можно хранить другие функции, как цвет, скорость, .... и т.д., используя forign key.