Объединение таблиц с разными атрибутами и размером в SQL - PullRequest
0 голосов
/ 22 февраля 2019

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

Product(manufacturer,model,type)
Laptop(model,speed,ram,hd,price)
Printer (model,color,type,price)

Как вы видите, таблица продуктов содержит названия производителей и номер модели продуктов, которые они производят.Атрибуты типа просто указывают, является ли принтер или ноутбук. Теперь, скажем, как пользователь, я хочу найти все продукты (как ноутбуки, так и принтеры), которые производит производитель «А», и на выходе должна быть одна таблица. с использованием оператора SQL.

Меня смущает то, как объединить две таблицы с разными атрибутами и размерами столбцов.На данный момент я только что нашел модели ноутбуков и ПК для производителя «A»:

SELECT * from Product P , Laptop L where P.model = L.model
SELECT * from Product P, Printer PR where P.model = PR.model

Обратите внимание, что это два отдельных запроса.Я просто не знаю, как бы я их сочетал.Попытка UNION, но это не помогло

РЕДАКТИРОВАТЬ: проблема утверждает, что мне нужно напечатать номер модели, тип продукта и все атрибуты любого отношения, подходящего для этого типа.

Ответы [ 4 ]

0 голосов
/ 22 февраля 2019

Похоже, что вы можете сделать:

select p.*
from product p
where p.manufacturer = 'A' and
      (exists (select 1
               from laptop l
               where l.model = p.model and l.type = 'laptop'
              ) or
       exists (select 1
               from printer pr
               where pr.model = p.model and pr.type = 'printer'
              )
      );

Однако, похоже, что вы можете просто сделать:

select p.*
from product p
where p.type in ('laptop', 'printer');

Если вы хотите ввести дополнительные атрибуты, используйте union all вот так:

select p.*, lp.*
from product p join
     ((select model, type, price
       from laptop
      ) union all
      (select model, type, price
       from printer
      )
     ) lp
     on lp.model = p.model and lp.type = p.type;
0 голосов
/ 22 февраля 2019

использовать левое соединение

   select p.*,l.*,pr.* from Product p left join Laptop l on p.model=l.model
                      left join printer pr on pr.model=p.model
0 голосов
/ 22 февраля 2019

Вы можете использовать предложение INNER JOIN, затем указать условие соединения и после этого условие where.Я надеюсь, что это будет работать для вас.

0 голосов
/ 22 февраля 2019

Вы можете использовать EXISTS с UNION ALL:

SELECT p.manufacturer, p.model, p.type
FROM product p
WHERE p.manufacturer = 'A' AND
      EXISTS (SELECT 1 FROM laptop l WHERE l.model = p.model)
UNION ALL -- USE "UNION" IN ORDER TO REMOVE DUPLICATE ROW
SELECT p.manufacturer, p.model, p.type
FROM product p
WHERE p.manufacturer = 'A' AND
      EXISTS (SELECT 1 FROM Printer pr WHERE pr.model = p.model);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...