查询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
答案 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
。