在SQL中组合具有不同属性和大小的表

问题描述 投票:0回答:4

我有以下三个表:

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

如您所见,产品表包含制造商的名称以及他们制造的产品的型号。 type属性只指定是打印机还是笔记本电脑。现在让我们说作为用户我想找到制造商'A'制作的所有产品(包括笔记本电脑和打印机),输出应该是一个表。使用SQL语句。

我感到困惑的是如何组合两个具有不同属性和列大小的表。截至目前,我刚刚找到了制造商'A'的笔记本电脑和PC机型:

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

请注意,这是两个单独的查询。我只是不知道如何将它们结合起来。尝试UNION,但没有帮助

编辑:问题表明我需要打印型号,产品类型以及适合该类型的任何关系的所有属性。

mysql sql
4个回答
0
投票

你可以使用EXISTSUNION 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);

0
投票

使用左连接

   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
投票

您可以使用INNER JOIN子句然后给出您的连接条件和之后的where条件。我希望它对你有用。


0
投票

看起来你可以做到:

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;
© www.soinside.com 2019 - 2024. All rights reserved.