2012-03-27 3 views
0

Dies ist die Abfrage, die ich zur Zeit bin mit:Wie ändere ich meine mysql-Abfrage so, dass Zeilen eingeschlossen werden, für die der innere Join keine Übereinstimmung findet?

SELECT 
q1.item AS q1item,q1.store AS q1store,q1.marion AS q1marion, 
q1.carbondale AS q1carbondale,q2.marion AS q2marion,q2.carbondale AS q2carbondale 
FROM jdgower_items q1 
INNER JOIN jdgower_items q2 ON q1.item=q2.item 
AND q1.store_id=q2.store_id AND DATE(q1.datetime) = DATE(NOW()) 
AND DATE(q2.datetime) = DATE(NOW() - INTERVAL 1 DAY) 
WHERE q1.store_id='$the_main_store_id' OR q1.competitor_id='$the_main_store_id' 
ORDER BY q1.item ASC,q1.competitor_id ASC,q1.store DESC,q1.store_id ASC 

Grundsätzlich ist die Idee, einen Artikel pro Reihe zu bekommen, mit dem Preis der heutigen und dem Preis von gestern ... zusammen mit all den Wettbewerbern mit Ich-Tracking ihre jeweiligen Preise. Das bringt mir genau das, was ich will, bis ich einen neuen Wettbewerber hinzufüge ... wenn dieser Wettbewerber keinen Eintrag für gestern hat, gibt es für diesen Wettbewerber in der Schleife nichts mehr. Ich bin mir ziemlich sicher, dass es etwas mit INNER JOIN in der Zeile "AND DATE (q2.datetime) = DATE (JETZT() - INTERVALL 1 DAY) zu tun hat", aber ich bin mir nicht sicher, wie ich das beheben soll. Vielen Dank für jede Hilfe im Voraus!

Antwort

0

Wie wäre es mit LEFT JOIN anstelle von INNER JOIN? Auf diese Weise werden Sie einige Ergebnisse mit NULL für q2 Felder haben, aber Sie werden die Zeilen haben.

+0

JOIN Vielen Dank für die Antwort und ich entschuldige mich für meine Unbeholfenheit ... wenn ich ‚inneren‘ auf ‚links‘ es zieht endet ändern alle Reihen, an denen ich nur heute und gestern ziehen möchte. – jdgower

+0

Ich dachte: 'INNER jdgower_items q2 ON q1.item JOIN = q2.item UND q1.store_id = q2.store_id UND DATUM (q1.datetime) = DATE (NOW()) LEFT JOIN DATE (q2.datetime) = DATUM (JETZT() - INTERVALL 1 TAG) ' aber das wirft einen Syntaxfehler. – jdgower

+0

oh ich verstehe. Ich habe nicht genug auf Ihre Anforderungen geachtet – haltabush

0

Je nachdem, was Sie suchen, versuchen LEFT JOIN wenn yhat versuchen scheitern RECHTS

+0

LEFT JOIN endet beim Ziehen aller Zeilen, RIGHT JOIN endet beim Ziehen genau wie beim INNER JOIN. Danke für Ihre Antwort. Bitte lassen Sie mich wissen, wenn ich nicht genügend Informationen zur Verfügung gestellt habe. – jdgower