Ich versuche, doppelte Datensätze basierend auf einer Übereinstimmung von drei Spalten auszuwählen. Die Liste der Tripel könnte sehr lang sein (1000), daher möchte ich es kurz fassen.MySql IN-Klauseln, versuchen, IN Liste von Tupeln
Wenn ich eine Liste der Größe 10 (bekannt Duplikate) haben es passt nur 2 (scheinbar zufällig sind) und vermisst die anderen 8 I 10 Datensätze erwartet zurück, sah aber nur 2.
Ich habe verengt es auf dieses Problem:
Dies gibt einen Datensatz zurück. Erwartet 2:
select *
from ali
where (accountOid, dt, x) in
(
(64, '2014-03-01', 10000.0),
(64, '2014-04-23', -122.91)
)
Gibt zwei Datensätze, wie erwartet:
select *
from ali
where (accountOid, dt, x) in ((64, '2014-03-01', 10000.0))
or (accountOid, dt, x) in ((64, '2014-04-23', -122.91))
Irgendwelche Ideen, warum die erste Abfrage nur einen Datensatz zurückgibt?
Ich war nicht in der Lage, das Problem auf meinem Rechner (MySQL 5.6 zu reproduzieren .14). Kannst du eine Geige machen? – Vatev
Können Sie Ihre Frage bearbeiten und die Datentypen von Spalten beschreiben ('SHOW CREATE TABLE ali')? Wenn Sie 'FLOAT' oder' DOUBLE' für die Spalte 'x' verwenden, kann dies dazu führen, dass Gleichheitsvergleiche fehlschlagen, weil der exakte Wert auf unerwartete Weise gerundet wird. Bitte geben Sie auch genau an, welche Version von MySQL Sie verwenden. –
Können Sie den von Ihnen verwendeten Code posten? Ich habe das in eine Tabelle kopiert und zuerst sah es so aus, als wäre es ein Operandenwert, aber das war meine Schuld, weil ich einen Klammersatz vermisste. Wie Vatev konnte ich das Problem nicht reproduzieren – DanceSC