从3个表中选择 - 使用join或union?

时间:2018-02-09 12:45:49

标签: mysql

我想从3个不同的表中选择某些字段并通过id_product链接?我似乎无法找到是否应该使用联接或联合?我已经尝试了以下但是出现了错误

SELECT id_product, price, wholesale_price, id_category_default, id_shop_default, description, description_short, link_rewrite, meta_description, meta_keywords, meta_title, name, id_shop, weight  
from ps_product, ps_product_lang, ps_product_attribute_shop 
where ps_product.id_product = ps_product_lang.id_product 
and ps_product_lang.id_product = ps_product_attribute_shop.id_product   
  

错误代码:1052。专栏' id_product'在字段列表中   暧昧0.00031秒

我需要的表格和字段是:

ps_product
----------
id_product,
price,
wholesale_price,
id_category_default,
id_shop_default.

ps_product_lang
---------------
id_product,
description,
description_short,
link_rewrite,
meta_description,
meta_keywords,
meta_title,
name.

ps_product_attribute_shop
-------------------------
id_product,
id_shop,
price,
weight.

任何帮助将不胜感激

感谢您的帮助。

我设法得到了我正在寻找的东西:

选择ps_product.id_product,ps_product.price,ps_product.wholesale_price,ps_product.id_category_default,ps_product.id_shop_default,ps_product_lang.description,ps_product_lang.description_short,ps_product_lang.link_rewrite,ps_product_lang.meta_description,ps_product_lang.meta_keywords,ps_product_lang.meta_title,ps_product_lang。 name,ps_product_attribute_shop.id_shop,ps_product_attribute_shop.price,ps_product_attribute_shop.weight

FROM ps_product     LEFT JOIN ps_product_lang on     ps_product.id_product = ps_product_lang.id_product     LEFT JOIN ps_product_attribute_shop     ON ps_product.id_product = ps_product_attribute_shop.id_product

可能还有很长的路要走,但我更容易跟随

2 个答案:

答案 0 :(得分:0)

如果无法理解您尝试从哪个表中进行选择,则会出现

列模糊错误。在您的选择查询中创建表格别名,例如ps_product as psp,然后选择select psp.id_product, [[all columns with aliases]]

一种方法可能是 - > SELECT ps_product.id_product, ps_product_attribute_shop.price, ps_product_lang.description from ps_product, ps_product_lang, ps_product_attribute_shop where ps_product.id_product = ps_product_lang.id_product and ps_product_lang.id_product = ps_product_attribute_shop.id_product

像这样修改您的查询只需确保从包含它们的表中选择列和您要从中选择它们的列。

答案 1 :(得分:0)

当您正在进行连接操作的表中有两个具有相同名称的列时,会发生列歧义。在这种情况下,您必须显式写入表的名称(或其别名)以及列名。

gdal.AutoCreateWarpedVRT