2010-05-07 4 views
0

Je le tableau suivant:MYSQL Sélectionnez statment avec modification de tuple valeurs

bar_id, bar_name, subscription_id_fk, sub_name 

par exemple:

1, Hard Rock, 2, Gold 
2, TGIF, 1, Free 

Maintenant, j'ai besoin et SQL pour extraire ce tableau, mais où sub_name = or, je besoin de doubler l'abonnement_id_fk. Vous pouvez aider s'il vous plaît ?

Edit: J'ai besoin de cette valeur à seulement changé le résultat de la requête SQL

+0

Jetez un oeil à la réponse de Vitalii et voir si c'est ce que vous vouliez dire. En d'autres termes: avez-vous voulu a) renvoyer uniquement les lignes où sub_name = 'Gold' (et return subscription_id_fk * 2) ou b) subscription_id_fk pour toutes les lignes, mais dans le cas où sub_name = 'Gold' renvoie la double valeur? – Unreason

Répondre

0

vous cherchez quelque chose d'aussi simple que

SELECT (subscription_id_fk * 2) as double_sif 
FROM table 
WHERE sub_name = 'Gold' 

comme vous avez accepté cette réponse quelques commentaires

  • instructions SELECT ne changent jamais quoi que ce soit dans la base de données, pour que vous avez besoin UPDATE, INSERT ou DELETE (au moins lire wikipedia article sur SQL)
  • le nom du champ suggère qu'il est un foreign key à une autre table et même si il est possible, les clés ne font normalement multiplier aucun sens
0

Peut-être que je ne comprends pas la question, mais cela ressemble à une mise à jour simple pour moi:

UPDATE table 
SET subscription_id_fk = (subscription_id_fk * 2) 
WHERE sub_name = "Gold" 

+0

Je ne dirais pas que cela ne changerait que dans les résultats, mais seulement dans la base de données. :) – Unreason

+0

Oh - Je n'ai pas vu le "seulement dans le résultat" partie - il a été édité après moi :) – crono

2
SELECT IF(sub_name = 'Gold', subscription_id_fk * 2, subscription_id_fk) as fk 
FROM my_table 
+0

Ok, c'est beaucoup plus simple que mon approche :-) – crono

0

This peut vous aider.

Ainsi, selon le lien que vous essayez,
select subscription_id_fk * 2 from table where sub_name = 'Gold'

Je ne l'avais pas essayer practically.I juste trouver sur Internet. Alors, essayez-le.

0

Ok, si vous avez besoin de toutes les lignes, mais seulement -ones « Gold » avec les touches doublées, vous pouvez utiliser

 
SELECT 
    GREATEST(t.subscription_id_fk, IFNULL(t2.subscription_id_fk,0)) AS subscription_id_fk, 
    bar_id, 
    bar_name, 
    sub_name 
FROM table AS t 
LEFT JOIN (
    SELECT (subscription_id_fk * 2) AS subscription_id_fk, 
     id 
    FROM table t2 
    WHERE sub_name ="Gold") AS t2 
ON (t.id = t2.id)