2017-08-20 1 views
0

SQL-Abfrage geben funktioniert, aber letzte zwei und Zustand in nicht genauer AntwortSQL-Abfrage nicht genaue Antwort

Abfrage geben:

SELECT products.*,wishlist.user_id,wishlist.p_id 
FROM products 
LEFT JOIN wishlist 
    ON products.pro_id=wishlist.p_id AND products.categ_id=2 AND wishlist.user_id=5 
+3

Willkommen bei Stack Overflow! Bitte nehmen Sie die [Tour] (https://Stackoverflow.com/tour), schauen Sie sich um, und lesen Sie durch die [Hilfe-Center] (https://stackoverflow.com/help), insbesondere [wie stelle ich eine gute Frage?] (https://stackoverflow.com/help/how-to-ask) und [Was kann ich hier fragen?] (https://stackoverflow.com/help/on- Thema). –

Antwort

1

Ihre Frage gibt nicht an, welches Problem Sie haben, also werde ich durchgehen, wie man dies behebt.

Zuerst ist dies eine Linke Join, also vermutlich wollen Sie alles in der Produkttabelle, kombiniert mit einigen Dingen in der linken Join-Tabelle. Es gibt einen großen Unterschied zu Outer-Joins in der Join-Bedingung gegenüber der Where-Klausel.

Lassen Sie uns gehen, was ein paar Permutationen bedeuten. Normalerweise möchten Sie diese zuerst betrachten. Meine Empfehlung ist Sie Starten Sie indem Sie zu einer inneren Verbindung wechseln und sehen, was Sie bekommen. Es ist in der Regel einfacher, mit der Problembehandlung eines inneren Joins zu beginnen und danach zum äußeren Join zu gehen. So

beginnen mit:

SELECT products.*,wishlist.user_id,wishlist.p_id 
FROM products 
JOIN wishlist 
ON products.pro_id=wishlist.p_id AND products.categ_id=2 AND wishlist.user_id=5 

Vergewissern Sie sich, dass die Ergebnisse, was Sie zuerst erwarten. Dann finde heraus, was du willst. Wenn Sie alle Produkte mit den an Kategorie 2 und Benutzer-ID angefügten Wishlist-Daten wünschen, kehren Sie zu Ihrer ursprünglichen Abfrage zurück. Wenn Sie Daten Wunschliste Produkte in category2 mit User_id die wollen, dann tun:

SELECT products.*,wishlist.user_id,wishlist.p_id 
FROM products 
LEFT JOIN wishlist 
    ON products.pro_id=wishlist.p_id AND wishlist.user_id=5 
where products.categ_id=2 

Es gibt mehrere andere mögliche Permutationen, aber es sei denn, Sie klar darüber, welche Antworten Sie suchen aus der Datenbank, das ist der beste Rat, den ich geben kann .

0

Sie fügen Ihren Zustand in Ihrer Verknüpfungsanweisung; Da es sich um eine linke Verknüpfung handelt, bedeutet das, dass Sie Ergebnisse aus Ihrer Produkttabelle erhalten, mit denen sie übereinstimmten oder nicht.

Wenn Sie nur Ergebnisse erhalten möchten, dass Ihre Produkte in der Wunschliste passt werden Sie es zu einer where-Anweisung ändern müssen oder inneren statt LEFT JOIN

-2

dies versuchen verwenden beitreten, wenn es funktioniert:

SELECT p.*, w.user_id, w.p_id FROM products p LEFT JOIN wishlist w ON p.pro_id = w.p_id WHERE p.categ_id = 2 AND w.user_id = 5

+0

Das ist falsch! Bedingungen in der rechten Tabelle eines LEFT JOIN sollten nur innerhalb der ON-Klausel angegeben werden!Wenn nicht, das ist nur wie mit einem INNEREN JOIN – sagi

1

Wenn Sie eine left join verwenden, gehen die Bedingungen für die erste Tabelle in der where Klausel. Bedingungen auf dem zweiten Sprung im on:

SELECT p.*, wl.user_id, wl.p_id 
FROM products p LEFT JOIN 
    wishlist wl 
    ON p.pro_id = wl.p_id AND wl.user_id = 5 
WHERE p.categ_id = 2; 

Dies mögen wie ein obskures „Feature“ von SQL zu sein scheinen. Aber es macht wirklich viel Sinn. Die LEFT JOIN behält alle Zeilen in der ersten Tabelle, auch wenn die ON-Klausel nicht zu True ausgewertet wird. Das schließt Bedingungen auf der ersten Tabelle ein. Mit anderen Worten, die ON-Klausel ignoriert Bedingungen in der ersten Tabelle.

+0

https://stackoverflow.com/questions/354070/sql-join-where-clause-vs-on-clause –

+0

danke, mein Herr, es funktioniert –