我需要一些查询帮助。
首先,这里是表格:
--
-- Create table produit
--
CREATE TABLE produit (
ref_prod integer primary key,
name_prod text not null,
color text ,
weight integer
);
--
-- Create table factory
--
CREATE TABLE factory (
ref_factory integer primary key,
name_factory text not null,
city text not null
);
--
-- Create table shop
--
CREATE TABLE shop (
ref_shop integer primary key,
name_shop text not null,
city text not null
);
--
-- Create table provenance
--
CREATE TABLE provenance (
ref_prod integer,
ref_factory integer,
ref_shop integer,
quantity integer,
constraint cle_prim primary key (ref_prod, ref_factory, ref_shop)
);
--
-- Data for Name: shop
--
INSERT INTO shop (ref_shop, name_shop, city) VALUES (14, 'Stock10', 'Paris');
INSERT INTO shop (ref_shop, name_shop, city) VALUES (16, 'JaiTout', 'Marseille');
INSERT INTO shop (ref_shop, name_shop, city) VALUES (18, 'EnGros', 'Bordeaux');
INSERT INTO shop (ref_shop, name_shop, city) VALUES (20, 'PrixBas', 'Toulouse');
INSERT INTO shop (ref_shop, name_shop, city) VALUES (22, 'BasPrix', 'Marseille');
INSERT INTO shop (ref_shop, name_shop, city) VALUES (24, 'DuBon', 'Lyon');
INSERT INTO shop (ref_shop, name_shop, city) VALUES (26, 'DuBeau', 'Toulouse');
INSERT INTO shop (ref_shop, name_shop, city) VALUES (28, 'BasDeGamme', 'Dublin');
INSERT INTO shop (ref_shop, name_shop, city) VALUES (30, 'PasCher', 'Lyon');
--
-- Data for Name: produit
--
INSERT INTO produit (ref_prod, name_prod, color, weight) VALUES (1, 'tabouret', 'rouge', 5);
INSERT INTO produit (ref_prod, name_prod, color, weight) VALUES (2, 'evier', 'bleu', 65);
INSERT INTO produit (ref_prod, name_prod, color, weight) VALUES (3, 'bureau', 'jaune', 45);
INSERT INTO produit (ref_prod, name_prod, color, weight) VALUES (4, 'lampe a petrole', 'vert', 15);
INSERT INTO produit (ref_prod, name_prod, color, weight) VALUES (5, 'ordinateur', 'rouge', 10);
INSERT INTO produit (ref_prod, name_prod, color, weight) VALUES (6, 'telephone', 'bleu', 8);
INSERT INTO produit (ref_prod, name_prod, color, weight) VALUES (7, 'tabouret', 'violet', 1);
INSERT INTO produit (ref_prod, name_prod, color, weight) VALUES (8, 'evier', 'bleu', 65);
INSERT INTO produit (ref_prod, name_prod, color, weight) VALUES (9, 'tabouret', 'orange', 3);
INSERT INTO produit (ref_prod, name_prod, color, weight) VALUES (10, 'lampe halogene', 'rose', 11);
INSERT INTO produit (ref_prod, name_prod, color, weight) VALUES (11, 'lampe a souder', 'noir', 3);
INSERT INTO produit (ref_prod, name_prod, color, weight) VALUES (12, 'telephone', 'bleu', 2);
INSERT INTO produit (ref_prod, name_prod, color, weight) VALUES (13, 'casse-noix', 'vert', 1);
INSERT INTO produit (ref_prod, name_prod, color, weight) VALUES (14, 'casse-pied', 'marron', 55);
INSERT INTO produit (ref_prod, name_prod, color, weight) VALUES (15, 'casse-oreille', 'violet', 15);
INSERT INTO produit (ref_prod, name_prod, weight) VALUES (16, 'casserole', 'bleu');
INSERT INTO produit (ref_prod, name_prod, weight) VALUES (17, 'bottes', 'rouge');
INSERT INTO produit (ref_prod, name_prod) VALUES (18, 'lampe halogene');
INSERT INTO produit (ref_prod, name_prod, weight, weight) VALUES (19, 'table', 'rouge', 10);
INSERT INTO produit (ref_prod, name_prod, weight) VALUES (20, 'telephone', 3);
INSERT INTO produit (ref_prod, name_prod, weight, weight) VALUES (21, 'evier', 'bleu', 65);
INSERT INTO produit (ref_prod, name_prod, weight) VALUES (22, 'evier', 105);
INSERT INTO produit (ref_prod, name_prod, weight) VALUES (23, 'evier', 115);
--
-- Data for Name: provenance
--
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (1, 109, 14, 80);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (1, 109, 16, 100);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (1, 302, 16, 213);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (2, 189, 30, 213);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (3, 402, 14, 315);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (4, 200, 18, 985);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (5, 302, 20, 858);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (6, 213, 16, 315);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (6, 109, 22, 458);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (7, 109, 16, 213);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (8, 302, 16, 2000);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (9, 189, 30, 175);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (10, 402, 14, 100);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (11, 109, 16, 750);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (11, 302, 16, 100);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (12, 189, 30, 315);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (12, 200, 16, 589);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (12, 189, 22, 213);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (13, 402, 14, 499);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (14, 109, 18, 213);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (15, 189, 20, 1958);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (15, 189, 16, 333);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (16, 302, 14, 49);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (17, 109, 18, 213);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (16, 189, 20, 18);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (16, 213, 16, 33);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (18, 200, 18, 187);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (18, 302, 16, 88);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (18, 213, 14, 315);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (20, 109, 22, 458);
INSERT INTO provenance (ref_prod, ref_factory, ref_shop, quantity) VALUES (20, 402, 14, 13);
--
-- Data for Name: factory
--
INSERT INTO factory (ref_factory, name_factory, city) VALUES (109, 'martin', 'Nantes');
INSERT INTO factory (ref_factory, name_factory, city) VALUES (189, 'leroux', 'Marseille');
INSERT INTO factory (ref_factory, name_factory, city) VALUES (213, 'dupont', 'Bordeaux');
INSERT INTO factory (ref_factory, name_factory, city) VALUES (402, 'peugeot', 'Toulouse');
INSERT INTO factory (ref_factory, name_factory, city) VALUES (200, 'peugeot', 'Marseille');
INSERT INTO factory (ref_factory, name_factory, city) VALUES (302, 'rover', 'Londres');
--
-- Name: provenance_ref_shop_fkey; Type: FK CONSTRAINT;
--
ALTER TABLE provenance
ADD CONSTRAINT provenance_ref_shop_fkey FOREIGN KEY (ref_shop) REFERENCES shop(ref_shop);
--
-- Name: provenance_ref_prod_fkey; Type: FK CONSTRAINT;
--
ALTER TABLE provenance
ADD CONSTRAINT provenance_ref_prod_fkey FOREIGN KEY (ref_prod) REFERENCES produit(ref_prod);
--
-- Name: provenance_ref_factory_fkey; Type: FK CONSTRAINT;
--
ALTER TABLE provenance
ADD CONSTRAINT provenance_ref_factory_fkey FOREIGN KEY (ref_factory) REFERENCES factory(ref_factory);
我需要一个查询,它给出(x,y)商店的参考资料,这些参考资料由同一工厂生产的同一产品提供。 我必须只使用SELECT,WHERE和HAVING。
我开始使用类似的东西:
SELECT shop.ref_shop AS "shop1",shop.ref_shop AS "shop2"
FROM shop,
factory,
provenance,
produit
WHERE shop.ref_shop=provenance.ref_shop
AND produit.ref_prod=provenance.ref_prod
AND factory.ref_factory=provenance.ref_factory
AND shop1<>shop2
但我不知道如何只提供由同一工厂制造的同一产品的商店参考,并且它看起来像别名不适用于WHERE。 谢谢你的帮助。
答案 0 :(得分:0)
produit
表的架构本身是错误的。列名在表中必须是唯一的。
您可能会创建类似
的内容CREATE TABLE produit (
ref_prod integer primary key,
name_prod text not null,
weight_text text,
weight_int integer
);
插入语句需要相应更改,例如
INSERT INTO produit (ref_prod, name_prod, weight_text, weight_int) VALUES (12, 'telephone', 'bleu', 2);
我需要一个查询,它给出(x,y)商店的参考资料,这些参考资料由同一工厂生产的同一产品提供。我必须只使用SELECT,WHERE和HAVING。
首先尝试编写查询,然后在任何问题上寻求帮助,这一点很重要。
<强>更新强>
您不能在where子句中使用别名。应改为使用列名shop.ref_shop
。
另外,为什么要两次选择相同的列?
“”
SELECT shop.ref_shop AS "shop1",shop.ref_shop AS "shop2"
中没有必要,因为别名没有空格。
提供您希望查询返回的一些示例输出数据。
答案 1 :(得分:0)
与produit&tabouret&#39;相关的商店请求示例和工厂&#39;马丁&#39;
SELECT distinct
shop.name_shop, produit.name_prod, factory.name_factory
FROM
shop,
provenance,
factory,
produit
WHERE
shop.ref_shop = provenance.ref_shop
AND factory.ref_factory = provenance.ref_factory
AND produit.ref_prod = provenance.ref_prod
AND produit.name_prod = 'tabouret'
AND factory.name_factory = 'martin';
答案 2 :(得分:0)
我不确定你之后会发生什么,但这是获取所有数据的基本查询(忽略NULL值)。你应该能够根据你的需要进行修改......
SELECT s.ref_shop
, s.name_shop
, s.city shop_city
, v.ref_prod
, v.ref_factory
, v.quantity
, p.name_prod
, p.color
, p.weight
, f.name_factory
, f.city factory_city
FROM shop s
JOIN provenance v
ON v.ref_shop = s.ref_shop
JOIN produit p
ON p.ref_prod = v.ref_prod
JOIN factory f
ON f.ref_factory = v.ref_factory;
+----------+-----------+-----------+----------+-------------+----------+-----------------+--------+--------+--------------+--------------+
| ref_shop | name_shop | shop_city | ref_prod | ref_factory | quantity | name_prod | color | weight | name_factory | factory_city |
+----------+-----------+-----------+----------+-------------+----------+-----------------+--------+--------+--------------+--------------+
| 14 | Stock10 | Paris | 1 | 109 | 80 | tabouret | rouge | 5 | martin | Nantes |
| 16 | JaiTout | Marseille | 1 | 109 | 100 | tabouret | rouge | 5 | martin | Nantes |
| 22 | BasPrix | Marseille | 6 | 109 | 458 | telephone | bleu | 8 | martin | Nantes |
| 16 | JaiTout | Marseille | 7 | 109 | 213 | tabouret | violet | 1 | martin | Nantes |
| 16 | JaiTout | Marseille | 11 | 109 | 750 | lampe a souder | noir | 3 | martin | Nantes |
| 18 | EnGros | Bordeaux | 14 | 109 | 213 | casse-pied | marron | 55 | martin | Nantes |
| 18 | EnGros | Bordeaux | 17 | 109 | 213 | bottes | NULL | 0 | martin | Nantes |
| 22 | BasPrix | Marseille | 20 | 109 | 458 | telephone | NULL | 3 | martin | Nantes |
| 30 | PasCher | Lyon | 2 | 189 | 213 | evier | bleu | 65 | leroux | Marseille |
| 30 | PasCher | Lyon | 9 | 189 | 175 | tabouret | orange | 3 | leroux | Marseille |
| 22 | BasPrix | Marseille | 12 | 189 | 213 | telephone | bleu | 2 | leroux | Marseille |
| 30 | PasCher | Lyon | 12 | 189 | 315 | telephone | bleu | 2 | leroux | Marseille |
| 16 | JaiTout | Marseille | 15 | 189 | 333 | casse-oreille | violet | 15 | leroux | Marseille |
| 20 | PrixBas | Toulouse | 15 | 189 | 1958 | casse-oreille | violet | 15 | leroux | Marseille |
| 20 | PrixBas | Toulouse | 16 | 189 | 18 | casserole | NULL | 0 | leroux | Marseille |
| 18 | EnGros | Bordeaux | 4 | 200 | 985 | lampe a petrole | vert | 15 | peugeot | Marseille |
| 16 | JaiTout | Marseille | 12 | 200 | 589 | telephone | bleu | 2 | peugeot | Marseille |
| 18 | EnGros | Bordeaux | 18 | 200 | 187 | lampe halogene | NULL | NULL | peugeot | Marseille |
| 16 | JaiTout | Marseille | 6 | 213 | 315 | telephone | bleu | 8 | dupont | Bordeaux |
| 16 | JaiTout | Marseille | 16 | 213 | 33 | casserole | NULL | 0 | dupont | Bordeaux |
| 14 | Stock10 | Paris | 18 | 213 | 315 | lampe halogene | NULL | NULL | dupont | Bordeaux |
| 16 | JaiTout | Marseille | 1 | 302 | 213 | tabouret | rouge | 5 | rover | Londres |
| 20 | PrixBas | Toulouse | 5 | 302 | 858 | ordinateur | rouge | 10 | rover | Londres |
| 16 | JaiTout | Marseille | 8 | 302 | 2000 | evier | bleu | 65 | rover | Londres |
| 16 | JaiTout | Marseille | 11 | 302 | 100 | lampe a souder | noir | 3 | rover | Londres |
| 14 | Stock10 | Paris | 16 | 302 | 49 | casserole | NULL | 0 | rover | Londres |
| 16 | JaiTout | Marseille | 18 | 302 | 88 | lampe halogene | NULL | NULL | rover | Londres |
| 14 | Stock10 | Paris | 3 | 402 | 315 | bureau | jaune | 45 | peugeot | Toulouse |
| 14 | Stock10 | Paris | 10 | 402 | 100 | lampe halogene | rose | 11 | peugeot | Toulouse |
| 14 | Stock10 | Paris | 13 | 402 | 499 | casse-noix | vert | 1 | peugeot | Toulouse |
| 14 | Stock10 | Paris | 20 | 402 | 13 | telephone | NULL | 3 | peugeot | Toulouse |
+----------+-----------+-----------+----------+-------------+----------+-----------------+--------+--------+--------------+--------------+
答案 3 :(得分:0)
首先,简化。您有3个查找表...产品,工厂和商店。 然后是一张表格,其中列出了由哪些工厂生产的商店提供的所有产品。
现在,那说,你的问题本身并不是很清楚,但我的印象是你想知道哪家商店有同一工厂生产的完全相同的产品。
也就是说,根据产品常见产品/工厂开始对Provenance表中的WHAT产品进行简单查询,而不考虑商店。通过此计数获得计数&gt; 1.这导致哪些产品由多个商店位置销售。
让我们从每个查找提供的内容开始查看表的层次结构。
select
PV.ref_prod,
PV.ref_factory,
count(*) as howManyShops
from
Provenance PV
group by
PV.ref_prod,
PV.ref_factory
having
count(*) > 1
现在,如果您想获取这些产品,工厂和商店的价值,请使用此结果并将其连接到同一产品/工厂的Provenance,但现在,请加入查找表以查找相应的描述性组件。像。的东西。
select
PV2.ref_prod,
PV2.ref_factory,
PV2.ref_shop,
PV2.quantity,
PR.name_prod,
PR.color,
PR.weight,
F.name_factory,
F.City,
S.name_shop,
S.City as ShopCity
from
( select
PV.ref_prod,
PV.ref_factory,
count(*) as howManyShops
from
Provenance PV
group by
PV.ref_prod,
PV.ref_factory
having
count(*) > 1 ) DupQualified
JOIN Provenance PV2
on DupQualified.ref_prod = PV2.ref_prod
AND DupQualified.ref_factory = PV2.ref_factory
JOIN Produit PR
on PV2.ref_prod = PR.ref_prod
JOIN Factory F
on PV2.ref_factory = F.ref_factory
JOIN Shop S
on PV2.ref_shop = S.ref_shop
order by
PR.name_prod,
F.name_factory,
S.name_shop
最终订单将在进入下一个产品/工厂之前显示相同产品/工厂的所有商店。
如果我对您所寻找的内容的假设不正确,请告诉我并请编辑原始问题,并提供更多详细信息以及查询输出的预期用途。