2010-10-11 129 views
0

我想知道是否可以将参数传递给select子查询。将参数传递给子查询

我想要做的是从一个表中收集一些产品数据,然后在装运表中将物品的重量交叉给它的运输成本以返回成本。

类似:

select cataloguenumber, productname, 
     (select shipping.carriagecost 
     from shipping 
     where shipping.carriageweight = weight) as carriagecost 
from products 

问候

DPERROTT

回答

3
select cataloguenumber, productname, shipping.carriagecost as carriagecost 
from products, shipping 
where shipping.carriageweight = products.weight 

还是我错过了什么?

0

你的子查询应该只返回1行,如果它返回更多的则是你的查询将扔在运行时错误。

+0

嗨Numenor,查询只会检索一个值作为马车会有一个具体的价值。即重量1 =运输4.99 – DPERROTT 2010-10-11 11:15:40

+0

我也同意加入方法,因为它会运行得更快,然后子查询的情况下表中有许多行 – Numenor 2010-10-11 11:29:40

1
SELECT DISTINCT cataloguenumber, productname, shipping.carriagecost 
FROM products 
LEFT OUTER JOIN shipping 
ON shipping.carriageweight = products.weight 
0

这是可能的,我认为,但你应该检索你想传递给你的父查询的列。

select cataloguenumber, productname, weight 
     (select shipping.carriagecost 
     from shipping 
     where shipping.carriageweight = weight) as carriagecost 
from products 
7

虽然子查询会的工作,更好的,更具可读性和有效的方式来定义,这将是如下:

SELECT p.cataloguenumber 
,  p.productname, 
,  s.carriagecost  
FROM products p 
    INNER JOIN 
     shipping s 
    ON p.weight = s.carriageweight 

这假定所有产品的重量在航运表中的相应条目。如果情况并非如此,则从INNER JOIN更改为LEFT JOIN并处理任何空值。

0
SELECT DISTINCT products.cataloguenumber, products.productname, shipping.carriagecost 
FROM products 
LEFT JOIN shipping ON shipping.carriageweight = products.weight