从同一列(可能不同的行)中选择首先,我搜索并发现了类似的问题,但没有一个看起来像我所需要的。在一条SELECT语句中使用JOIN
其次,我做了一个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______
注意(在结果中)“单位”和“基本单位”来自同一个表列,但有时候来自不同的行。
到目前为止好,但我无法弄清楚使用联接,是否有可能?我想要JOINs的主要原因是有2个嵌套查询很好用,但是,如果我有这样的7或8关系,这将是一个混乱
请原谅我长张贴并提前致谢。
哦!得到它了!!谢谢!!! – Soulless 2011-03-24 19:23:44