mysql连接表的重复结果

mysql连接表的重复结果,mysql,join,Mysql,Join,我正在为一个著名的购物车推出自己的功能。我的问题是: SELECT d.product, d.product_id, p.price FROM cscart_product_descriptions AS d, cscart_product_prices AS p WHERE d.product_id IN ( SELECT product_id FROM cscart_products WHERE product_code IN ( SELECT product_id FROM csc

我正在为一个著名的购物车推出自己的功能。我的问题是:

    SELECT d.product, d.product_id, p.price FROM cscart_product_descriptions AS d, cscart_product_prices AS p WHERE d.product_id IN (
SELECT product_id FROM cscart_products WHERE product_code IN (
SELECT product_id FROM cscart_range WHERE range_name IN (
SELECT range_name FROM cscart_range WHERE product_id = '0140885'
)))
当我从第一个选择中删除与product_prices相关的选择时,我会按预期返回三个项目。当我把价格包括在内运行它时,我得到了大约4500个结果

我知道这是一个共同的问题,我只是不知道如何纠正它


干杯

它与cscart\u product\u prices表进行交叉连接

您可以尝试以下方法:

 select a.*,p.price from (
      SELECT d.product, d.product_id 
      FROM cscart_product_descriptions AS d 
      WHERE d.product_id IN (
         SELECT product_id FROM cscart_products WHERE product_code IN (
         SELECT product_id FROM cscart_range WHERE range_name IN (
         SELECT range_name FROM cscart_range WHERE product_id = '0140885'
         )))a
join cscart_product_prices AS p
on p.product_id=a.product_id

另外,请使用联接尝试此查询-

SELECT
  d.product, d.product_id, p.price
FROM
  cscart_product_descriptions d
JOIN cscart_products p
  ON p.product_id = d.product_id 
JOIN cscart_range r1
  ON r1.product_id = p.product_code
JOIN cscart_range r2
  ON r2.range_name = p.range_name
WHERE r2.product_id = '0140885'

好的,经过一点编辑后,这对我很有用。join关键字是如何防止交叉联接的?当您在两个表名之间使用,并且没有任何where条件时,它将充当交叉联接,结果到笛卡尔积。您可以使用关键字join和ON条件来避免sameOK,因此交叉连接是默认选项,join超越了这一点,并允许您尊重表关系。干杯