Also habe ich einen Fehler in meiner Anwendung gefunden, es zeigte mir kein Ergebnis, das es haben sollte. Ich verfolgte es zurück zu der folgenden SQL-Abfrage (ich entfernte die irrelevanten Teile).Falsche MySQL Unterabfrage Ergebnis
Wie Sie die Abfrage von wc_hncat_products
Zeilen sehen können, von denen wählen die entsprechende IDs hat eine Anzahl von> = 1 innerhalb der wc_hncat_product_category_has_product
Tabelle
Wenn ich die Abfrage mit der Unterabfrage Ergebnis als eine Spalte ausführen, können Sie sehen, das Ergebnis ist 1
. Aber wenn ich es in der WHERE-Klausel verwende, schlägt der >= 1
Vergleich fehl.
Der Nachweis, dass die Unterabfrage zurückgibt 1:
SELECT `wc_hncat_products`.`id`,
(SELECT Count(*)
FROM `wc_hncat_product_categories`
INNER JOIN `wc_hncat_product_category_has_product`
ON `wc_hncat_product_categories`.`id` =
`wc_hncat_product_category_has_product`.`category_id`
WHERE `wc_hncat_product_category_has_product`.`product_id` =
`wc_hncat_products`.`id`
AND `category_id` IN ('1')) count
FROM `wc_hncat_products`
WHERE `id` IN ('785')
Diese Abfrage gibt eine Zeile, mit der Spalte count
Wert 1 ist
Keine Ergebnisse mit Unterabfrage Zählwertvergleichsprozesses in WHERE-Klausel
SELECT `wc_hncat_products`.`id`
FROM `wc_hncat_products`
WHERE (SELECT Count(*)
FROM `wc_hncat_product_categories`
INNER JOIN `wc_hncat_product_category_has_product`
ON `wc_hncat_product_categories`.`id` =
`wc_hncat_product_category_has_product`.`category_id`
WHERE `wc_hncat_product_category_has_product`.`product_id` =
`wc_hncat_products`.`id`
AND `category_id` IN ('1')) >= 1
AND `id` IN ('785')
Diese Abfrage wählt 0 Zeilen aus. .
Wie ist das möglich? Sie können sehen, dass die Zählung tatsächlich 1 ist, aber der Vergleich schlägt immer noch fehl, da keine Ergebnisse zurückgegeben werden, während die Unterabfragen in beiden Szenarien identisch sind.
ich nicht diese kleinen Bildtexte lesen kann. – jarlh
Bearbeiten Sie Ihre Frage und die Abfragen in der Frage als * Text *. Sie haben genug Erfahrung auf der Website, dass Sie wissen sollten, dass dies eine gute Idee ist. –
Ich aktualisierte die Frage, um die Codeblöcke einzuschließen. – Boyd