如何通过这个表结构查询

时间:2011-12-29 12:47:34

标签: mysql join

您好我有一个products表,其中包含字段

     products_id,products_number,products_status,products_price

其中products_idauto_incrementPRIMARY_KEY

我有其他表products_description有字段

 products_id,language_id,products_description,products_name

products_id and language_id或复合主键。请记住products_idproducts表中的相同。现在在products_description表格中,针对不同的products_id,针对一个language_id的记录不止一条。

我的问题

我必须从products表中的products_name表和products_description列获取所有列。我已经应用了像这样的简单连接查询

SELECT p.products_id,p.products_model,p.products_price,p.products_status,pd.products_name FROM products p, products_description pd WHERE p.products_id=pd.products_id

但我知道这个查询是错误的,因为如果一个产品在products_description表中有多个记录,它会返回多行。

我想要什么

我想从products_description中针对查询中的每个products_id产品table table if no language_id is given in query. I know that it can be done if I apply language_id`条件提取一条记录。但有没有办法获得记录

2 个答案:

答案 0 :(得分:1)

select p.*, 
       pd.products_name
from products   p,
      products_description pd
where p.products_id = pd.products_id
and   pd.language_id = 
        (select min(language_id)
          from products_description pd2
          where pd.products_id = pd2.products_id)

应该做的伎俩。

答案 1 :(得分:1)

假设返回的任何描述都没有问题。 使用products_description上的相关子查询来获取相关products_ID的最小值语言ID

select p.products_id, p.products_number,p. products_status,p. products_price
       pd.language_id, pd.products_description, pd.products_name
from   products p, 
       products_description pd,
       (Select min(Language_ID) mLID 
        from products_Description ipd 
        where PD.Products_ID=ipd.products_ID 
          and ipd.language_ID = pd.language_ID) A
where  p.products_id  = pd.products_id