两个加入或不得到2个表

时间:2013-11-21 01:20:40

标签: mysql sql

我有两张桌子

Prodline

Prodline_nbr

Prodline_name

prodline_color_code

prodline_discount

产品

prod_nbr

PROD_NAME

prod_price

prod_cost

我想列出每个产品的名称,销售价格,产品系列名称和价格不超过200美元的产品的颜色代码,并按销售价格降序排序。

这是我的代码

select PRODLINE_NAME,PRODLINE_COLOR_CODE,PROD_NAME, PROD_PRICE
from prodline, product
where PRODLINE_NBR in (select PRODLINE_NBR from prodline) 
and prod_price<=200 
order by PROD_PRICE desc;

这不正确吗?我被告知有一种更好的方法可以使用某种sorta join?

第二次尝试

select PRODLINE_NAME,PRODLINE_COLOR_CODE,PROD_NAME, PROD_PRICE
from prodline, product
where PRODLINE_NBR = PROD_NBR
and prod_price<=200 
order by PROD_PRICE desc;

有人可以评论吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

第二个是正确的。第一个是错误的,因为它只是乘以两个表,我想这还不足以实现你的目标。 比较两个脚本,唯一的区别是where子句中的条件:

第一次使用PRODLINE_NBR in (select PRODLINE_NBR from prodline),这没什么意义,因为PRODLINE_NBR是prodline的一个字段,当然每个PRODLINE_NBR都应该在其中。有这种情况或没有什么不同。

第二个使用PRODLINE_NBR = PROD_NBR,这是一种连接两个表的典型方法。如果您想通过两个字段中的等式连接两个表,则需要它。

答案 1 :(得分:0)

第二种风格是最好的!有许多方法可以产生相同的输出。但效率至关重要。

这些链接很好地了解了如何加入JOIN和INDEX。