2017-06-22 1 views
2

Requête 1:Je suis face à problème dans jointure gauche

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) 

Dans un premier temps, je l'ai écrit ci-dessus requête en ce moment je besoin de détails ci-dessus ne Maintenant, je veux ajouter un détail de buyde_brand table afin que je pensais utiliser Left Join et en utilisant la requête ci-dessous, mais cela me donne une erreur en essayant dans PHPMyAdmin.

Quelqu'un peut-il voir mon code là où je me trompe?

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 

ERREUR: phpMyAdmin

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'LEFT JOIN buyde_brand ba ON b.bid = ba.bid LIMIT 0, 25' at line 16`

Mise à jour: 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

si je cours au-dessus de la requête en enlevant

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)

e fait partie puis il fonctionne mais je dois d'abord aller chercher selon cette condition et ensuite ajouter une enchère de buyde_brand

+0

Vos jointures devraient être avant vos filtres. Déplacez la jointure avant le 'où b.sku'. – Rob

+0

Réglez votre gauche après le 'FROM buyde_product b' –

+0

@Rob et Sebastain Bosch, merci j'ai compris le point. – inrsaurabh

Répondre

0

Vous définissez votre LEFT JOIN après la condition (WHERE) de votre requête. Vous devez définir le LEFT JOIN sur la partie du tableau de votre requête. Voir les éléments suivants:

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 
) 

Cette requête devrait également répondre à vos nouvelles exigences d'abord filtrer la table buyde_product puis LEFT JOIN sur cette table filtrée. Le résultat devrait être le même avec cette solution. Une autre solution serait de mettre votre requête originale dans un sous-select et LEFT JOIN sur ce sous-select.

1

Votre syntaxe SQL est incorrecte; l'ordre correct est SELECT - FROM - JOIN - WHERE (- GROUP BY - ORDER BY). Dans votre requête, vous mettez LEFT JOIN après la clause WHERE, ce qui est incorrect. Vous devriez l'écrire comme ceci:

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) 
+0

Merci @ b00n pour m'avoir aidé dans le bon ordre – inrsaurabh