Hat viele Suchvorgänge ausgeführt und konnte alle JOIN-Abfragen außer dieser schreiben. Ich habe 3 Tabellen, die wie folgt aussehen:MySQL - gibt einen einzelnen Datensatz zurück, indem mehrere Tabellen mit mehreren WHERE/OR-Klauseln verbunden werden
TABLE - accounts
account_id | account_email
1 | [email protected]
2 | [email protected]
TABLE - products
product_id | product_name
1 | name1
2 | name2
TABLE - licenses
license_id | account_id | product_id | license_code
1 | 1 | 1 |
2 | 1 | 2 |
3 | 0 | 1 | abc123
Ich weiß account_email
, product_id
und license_code
(dieses kann leer sein) Variablen und müssen überprüfen, ob Client-Lizenz für ausgewählte Produkt (Suche nach account_email
oder license_code
) hat .
Das Problem ist, dass account_id
manchmal 0 sein kann (mit anderen Worten, Client hat Lizenz, aber Client-Profil wird nicht in der Konten-Tabelle gespeichert).
Der Versuch, diese zu verwenden, aber es gibt falsch (dupliziert) Ergebnisse:
SELECT * FROM licenses
INNER JOIN products ON licenses.product_id=products.product_id AND products.product_id='X'
INNER JOIN accounts ON licenses.account_id=accounts.account_id AND accounts.account_email='XYZ' OR licenses.license_code='ZZZ'
Die Frage: Wie umschreiben ich Abfrage, so kann ich eine Aufzeichnung von account_email
oder license_code
Feld finden? Einfach gesagt, wenn account_id
nicht 0 ist (Profil existiert), sollte ich Daten aus 3 Tabellen sehen (Konten, Produkte, Lizenzen). Wenn account_id
0 ist, sollte ich Daten aus 2 Tabellen sehen (Werte aus der Account-Tabelle sollten als leer/null angezeigt werden).
Unnötig zu sagen, account_email
und license_code
Felder sind einzigartig.
müssen 'UND' vor dem 2. Join entfernen :) –
Danke für den Vorschlag. Es hat mehrere SQL-Fehler angezeigt, also habe ich es ein wenig modifiziert, indem ich 'AND' vor dem 2. Join entfernt habe und 'AND' vor dem letzten 'WHERE' entfernt habe. Hoffe, es ist immer noch in Ordnung? –
Leider funktioniert der Code nicht. Es funktioniert gut, wenn Account_email in der Datenbank vorhanden ist, aber wenn Account_email nicht in der Datenbank vorhanden ist (also Datensatz muss nach license_code gefunden werden), werden 0 Ergebnisse angezeigt. –