2010-07-14 7 views
-1
INSERT INTO 
product_search_table (id, score) 
VALUES (
SELECT product_id, 50 FROM cart_product WHERE product_id = 555 
) 

Me donne une erreur. Qu'est-ce que je fais mal?Quel est le problème avec cette requête?

555 va être remplacé par une variable.

+4

Quelle est l'erreur? –

+0

Juste pour ma paix de l'âme: Était-ce juste un exemple minimisé? Parce que la sous-requête est totalement inutile dans ce cas. – Bobby

+0

@Bobby J'ai une table temporaire contenant les résultats de recherche d'un algorithme. L'algorithme ne vérifie pas si l'identifiant du produit correspond aux termes de la recherche. Donc, avec le code ci-dessus, si la requête de recherche est l'identifiant du produit d'un produit, il insérera la table temporaire avec le produit de la table d'origine; avec un score de pertinence élevé. Si ça a du sens. –

Répondre

7

Vous utilisez une syntaxe incorrecte pour une requête INSERT ... SELECT.

Voilà comment vous feriez correctement:

INSERT INTO product_search_table (id, score) 
SELECT product_id, 50 FROM cart_product WHERE product_id = 555 

Plus d'informations: MySQL 5.1 Reference: INSERT..SELECT Syntax

+0

C'est bien de voir que nous sommes tous sur la même page. :) – Faisal

5

Essayez

INSERT INTO 
product_search_table (id, score) 
SELECT product_id, 50 FROM cart_product WHERE product_id = 555 
1

crochets autour de la sélection regard suspect - tout comme les valeurs. Essayez:

INSERT INTO product_search_table (id, score) 
SELECT product_id, 50 FROM cart_product WHERE product_id = 555 
1

Utilisation:

INSERT INTO product_search_table 
(id, score) 
SELECT product_id, 50 
    FROM cart_product 
WHERE product_id = 555 

Lorsque vous utilisez une instruction SELECT dans une instruction INSERT, ne pas utiliser le mot-clé VALUES ou SELECT entourez entre parenthèses.

-1

Je pense que la sous-requête peut renvoyer plusieurs lignes (en théorie). Alors, comment plusieurs rangées peuvent-elles s'inscrire dans un seul champ? Vous pouvez essayer de vous assurer que les données interrogées sont une valeur scalaire.

(Je ne suis pas trop sûr du second champ/de la valeur 50).

edit: VALUES est utilisé dans les instructions insert. Voir this page

edit2: Vous ne sélectionnez que les données pour la première colonne, où sont les données pour la deuxième colonne?

+0

VALUES est parfois utilisé pour INSERT, mais pas dans ce cas. –

1

vous ne pouvez pas faire cela avec les valeurs.

par exemple:

INSERT INTO 
product_search_table (id, score) 
SELECT product_id,50 FROM cart_product WHERE product_id = 555 
Questions connexes