Ich habe 3 Tabellen: usuaris, Versionen und usuari_versio für die Beziehung:MySQL 5.7: UNIQUE und existiert
id | usuari_id | versio_id | updated_at | created_at
die folgende Abfrage, durch Laravel erzeugt, der Benutzer kehrt nur dann, wenn die erste Zeile der Beziehung hat versio_id = 2, wenn E-Mail eine UNIQUE-Einschränkung hat.
Wenn ich jedoch die UNIQUE-Einschränkung entfernen, gibt die Abfrage den Benutzer für jede versio_id-Beziehung (wie gewünscht) zurück.
Ich habe auch gesehen, dass, wenn statt E-Mail verwende ich usuaris
. id
, das ist PK, das gleiche Ergebnis mit E-Mail mit UNIQUE Constraint passiert.
select *
from `usuaris`
where
`usuaris`.`email` = '[email protected]'
and exists (
select *
from `versions`
inner join `usuari_versio` on `versions`.`id` = `usuari_versio`.`versio_id`
where
`usuari_versio`.`usuari_id` = `usuaris`.`id`
and `versions`.`id` = 2
)
limit 1
Ich verstehe nicht wirklich, warum das passiert. Aber ich muss den Benutzer holen, wenn die Unterabfrage true zurückgibt und auch wenn E-Mail (oder ID) übereinstimmt.
Danke.
EDIT:
Ich versuchte, das "=" der Unterabfrage zu ändern für ein "like" (ohne%) und arbeitet nun als ich erwartet hatte:
...
and `versions`.`id` LIKE 2
...
Es arbeitet auch wenn ich das "=" für ein "Gefällt mir" des E-Mail-Vergleichs ändere.
Warum passiert das?
Danke, aber ich bin mit Laravel Framework und ich kann die Abfrage nicht leicht ändern. – kanashin
ow, tut mir leid :( –