gpt4 book ai didi

mysql - 使用 JOIN 从一个选择语句中的同一列(可能不同的行)中选择

转载 作者:行者123 更新时间:2023-11-29 00:57:17 26 4
gpt4 key购买 nike

首先,我搜索并找到了类似的问题,但没有一个看起来像我需要的。

其次,我做了一个返回我想要的内容的 select 语句,但我没有使用 JOIN,我想,如果可能的话,使用 JOIN,用 JOIN 来做并理解它。

假设我有这些表(经过简化,因为实际表更大):

products: 
fields: idproduct, name, idbaseunit;
primary key: idproduct
foreign key: idbaseunit references units.idunit
-----------------------------------------------

units:
fields: idunit, name
primary key: idunit
-----------------------------------------------

prodVSunit:
fields: idprodvsunit, idproduct, idunit, timesbaseunit, cost
primary key: idprodvsunit
foreign key: idproduct references products.idproduct
foreing key: idunit references units.idunit
-----------------------------------------------

此行为是我可以为同一产品设置不同的单位,它们是 baseunit 的倍数,但成本并不像倍数那样是相对的。我的英语不是很好,我不知道这是否解释得很好,所以,这里有一个例子:

如果我将大米注册为产品并将盎司作为其基本单位,我可以将磅(= 16 盎司)作为一个单位。如果我一盎司一盎司地出售,价格可能与磅出售的价格不同,假设每盎司 1.00 美元,每磅 15.45 美元。

在数据库中它看起来像这样:

insert into units(`idunit`, `name`) values(1,'ounce')
insert into units(`idunit`, `name`) values(2,'pound')

insert into products(`idproduct`, `name`, `idbaseunit`) values(1,'rice',1)
insert into products(`idproduct`, `name`, `idbaseunit`) values(2,'sugar',1)

insert into prodVSunit(`idprodvsunit`, `idproduct`, `idunit`, `timesbaseunit`, `cost`) values(1,1,1,1,1.00)
insert into prodVSunit(`idprodvsunit`, `idproduct`, `idunit`, `timesbaseunit`, `cost`) values(2,1,2,16,15.45)
insert into prodVSunit(`idprodvsunit`, `idproduct`, `idunit`, `timesbaseunit`, `cost`) values(3,2,1,1,0.85)

如果我运行这条语句,我会得到我想要的:

select pro.name as product, un.name as unit, pvu.timesbaseunit as 'times base unit', 
aux.name as 'base unit', pvu.cost
from units un, prodVSunit pvu, products pro,
(select prod.idproduct, prod.idbaseunit, unt.name from products prod, units unt
where prod.idbaseunit = unt.idunit) as aux
where aux.idproduct = pvu.idproduct and pvu.idproduct = pro.idproduct and pvu.idunit = un.idunit

查询返回:

-------------------------------------------------------------------
product______|unit______|times base unit_|base unit_____|cost_
-------------------------------------------------------------------
rice_________|ounce_____|1_______________|ounce_________|1_________
rice_________|pound_____|16______________|ounce_________|15.45_____
sugar________|ounce_____|1_______________|ounce_________|0.85______

请注意(在结果中)'unit' 和 'base unit' 来自相同的表列,但有时来自不同的行。

到目前为止一切顺利,但我无法使用 JOIN 解决它,这可能吗???我希望它与 JOIN 一起使用的主要原因是,使用 2 个嵌套查询既好又简单,但是,如果我有 7 或 8 个这样的关系,那将是一团糟

请原谅我发这么长的帖子,提前致谢。

最佳答案

您只需加入单位表两次。

我使用 ANSI 联接重写了您的查询以使其更具可读性,然后将 qub 查询替换为第二个单元联接:

select pro.name as product, un.name as unit, pvu.timesbaseunit as 'times base unit', 
baseUnit.name as 'base unit', pvu.cost
from prodVSunit pvu
inner join units un on pvu.idunit = un.idunit
inner join products pro on pvu.idproduct = pro.idproduct
inner join units baseUnit on pro.idbaseunit = baseUnit.idunit

关于mysql - 使用 JOIN 从一个选择语句中的同一列(可能不同的行)中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5422485/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com