2017-03-16 1 views
0

Ich habe Probleme mit dem nächsten Satz mit:Wie INSERT/WO GIBT ES NICHT in SQL

INSERT INTO `pasajeros` 
( 
    `nombre`, 
    `apellidos`, 
    `email`, 
    `password`, 
    `telefono` 
) 
VALUES 
(
    'Alexandra', 
    'Gonzalez', 
    '[email protected]', 
    '1234567!', 
    '04242344556' 
) 
WHERE NOT EXISTS 
( 
    SELECT * 
    FROM `transportistas` 
    WHERE `email` = '[email protected]' 
); 

Was in meinem Code falsch? Ich muss eine Einfügung machen, wenn eine E-Mail nicht in einer anderen Tabelle verwendet wird. Das war mein Ansatz, aber ich kann nicht herausfinden, warum meine Abfrage fehlschlägt.

+0

Was ist der Fehler? – Krishna

+0

# 1064 - Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion entspricht, für die richtige Syntax in der Nähe von 'WHERE NOT EXISTS (SELECT * FROM 'transportistas') WHERE' email' =' [email protected] 'in Zeile 1 –

+0

http: // stackoverflow. com/questions/485039/mysql-insert-where-query – Brad

Antwort

3

Ich glaube nicht, dass Sie Values mit einer where Klausel verwenden können. Aber Sie können mit einer select Anweisung einfügen, die eine where Klausel gut behandeln kann.

INSERT INTO `pasajeros` 
( 
    `nombre`, 
    `apellidos`, 
    `email`, 
    `password`, 
    `telefono` 
) 
Select * from (
select 
    'Alexandra' as `nombre`, 
    'Gonzalez' as `apellidos`, 
    '[email protected]' as `email`, 
    '1234567!' as `password` , 
    '04242344556' as `telefono` 
    ) i 
WHERE NOT EXISTS 
( 
    SELECT * 
    FROM `transportistas` 
    WHERE `email` = i.email 
); 
+1

"' nombre' = 'Alexandra' "- Ich glaube nicht, dass das funktioniert. Sie sollten einen Fehler wie" unbekannte Spalte 'nombre" bekommen " –

+0

@ that Art der Sache würde Arbeit in SQL-Server ... und ich nie wirklich MySQL.Können Sie nur 'as' zu Alias? – Brad

+0

@ PaulSpiegel das ist richtig Paul. Ich bekomme diese Fehler, wie kann ich es beheben? –

2

Die richtige Art und Weise, was Sie tun möchten, ist eine eindeutige Index/Einschränkung zu definieren:

create unique index unq_pasajeros_email on pasajeros(email); 

Die Datenbank wird dann die Daten schützen.

Dies ist viel besser als der Versuch, dies auf der Anwendungsebene zu tun, da dies die Duplizierung verhindert, wenn jemand die Daten manuell aktualisiert.

+0

Was bedeutet unq_pasajeros_email? Die Email muss in beiden eindeutig sein Pasaj "Eros" und "Transportistas" -Tabellen, das Feld in beiden Fällen heißt "email" –

+0

@CesarJrRodriguez. . . Dann benötigen Sie zwei eindeutige Indizes, einen für jede Tabelle. Ihre Frage betrifft jedoch nur "Pasajeros". –

Verwandte Themen