我正面临左联的问题

时间:2017-06-22 07:01:21

标签: mysql left-join

查询1:

SELECT b.id,
b.bid,
b.productname,
b.brandname, 
b.producttype, b.sku,
b.cat_id,
b.brandname,
b.costprice,
b.pweight,
b.monthly,
b.discountcodes, 
b.seller_id FROM `buyde_product` b 
where b.sku in ( SELECT buyde_new_new_sku.sku FROM buyde_new_new INNER JOIN buyde_new_new_sku ON buyde_new_new.cat_id = buyde_new_new_sku.cat_id)

最初,我写了上面的查询,因为那时我只需要上面的细节 现在我想从buyde_brand表中添加一个细节,所以我想使用Left Join并使用下面的查询但是在PHPMyAdmin中尝试时会出现错误。

任何人都可以看到我的代码,我错了吗?

SELECT b.id,
    b.bid,
    b.productname,
    b.producttype, b.sku,
    b.cat_id,
    b.brandname,
    b.costprice,
    b.pweight,
    b.monthly,
    ba.brandname, 
    ba.bid,
    b.discountcodes, 
    b.seller_id FROM `buyde_product` b 
    where b.sku in ( SELECT buyde_new_new_sku.sku FROM buyde_new_new INNER 
JOIN buyde_new_new_sku ON buyde_new_new.cat_id = buyde_new_new_sku.cat_id)

LEFT JOIN `buyde_brand` ba 
ON b.bid = ba.bid

错误:在phpmyadmin中

  

#1064 - 您的SQL语法出错;查看与您的MariaDB服务器版本对应的手册,以便在“JOFT JOIN buyde_brand ba附近使用正确的语法       ON b.bid = ba.bid LIMIT 0,25'在第16行

更新:SELECT b.id, b.bid, b.productname, b.producttype, b.sku, b.cat_id, b.brandname, b.costprice, b.pweight, b.monthly, ba.brandname, ba.bid, b.discountcodes, b.seller_id FROM buyde_product b LEFT JOIN buyde_brand ba ON b.bid = ba.bid

如果我通过删除

运行上面的查询

where b.sku in ( SELECT buyde_new_new_sku.sku FROM buyde_new_new INNER JOIN buyde_new_new_sku ON buyde_new_new.cat_id = buyde_new_new_sku.cat_id)

此部分然后运行,但我需要先根据此条件提取,然后想要从buyde_brand

添加出价

2 个答案:

答案 0 :(得分:1)

您的SQL语法错误;正确的顺序是SELECT - FROM - JOIN - WHERE( - GROUP BY - ORDER BY)。 在您的查询中,您将LEFT JOIN放在WHERE子句之后,这是不正确的。 你应该这样写:

SELECT b.id,
    b.bid,
    b.productname,
    b.producttype, b.sku,
    b.cat_id,
    b.brandname,
    b.costprice,
    b.pweight,
    b.monthly,
    ba.brandname, 
    ba.bid,
    b.discountcodes, 
    b.seller_id
FROM `buyde_product` b 
LEFT JOIN `buyde_brand` ba 
ON b.bid = ba.bid
    where b.sku in ( SELECT buyde_new_new_sku.sku FROM buyde_new_new INNER 
JOIN buyde_new_new_sku ON buyde_new_new.cat_id = buyde_new_new_sku.cat_id)

答案 1 :(得分:0)

您在查询条件(LEFT JOIN)之后设置WHERE。您必须在查询的表格部分设置LEFT JOIN。请参阅以下内容:

SELECT 
    b.id,
    b.bid,
    b.productname,
    b.producttype, b.sku,
    b.cat_id,
    b.brandname,
    b.costprice,
    b.pweight,
    b.monthly,
    ba.brandname, 
    ba.bid,
    b.discountcodes, 
    b.seller_id 
FROM `buyde_product` b LEFT JOIN `buyde_brand` ba ON b.bid = ba.bid
WHERE b.sku IN (
    SELECT buyde_new_new_sku.sku 
    FROM buyde_new_new INNER JOIN buyde_new_new_sku ON buyde_new_new.cat_id = buyde_new_new_sku.cat_id
)

此查询还应符合您的新要求,首先过滤buyde_product表,然后在此过滤表上过滤LEFT JOIN。结果应与此解决方案相同。另一种解决方案是将原始查询放入子选择中,并在此子选择中LEFT JOIN

相关问题