Dis que j'ai le tableau suivant: Comment puis-je interroger cela tel qu'il tente de me donner le nom code> et dans l'exemple ci-dessus, je devrais obtenir < Code> lorem 1 code> pour et
> où
language_id code> = 2, mais retombez sur
Language_ID code> = 1 Si la colonne contient une nulle? p>
nom code> et
vraiment sympa widget. Achetez-le maintenant! Code> pour
description code>. P> p>
5 Réponses :
select name, description from product where product_id = @pid and name is not null and description is not null and (language_id = @lang or language_id = 1) order by language_id desc where @pid is the current product id and @lang is the current language id.The first row returned will contain the current name and description.This assumes that the row language_id = 1 will NOT contain NULL in name or description.
et comment cela gère-t-il des colonnes nulles? Cela va-t-il tomber à la valeur de langage_id = 1?
Désolé, n'a pas vu l'exigence nulle. Je modifierai la STEMT STMT.
Les nulls sont attendus des valeurs des colonnes.
Je reçois toutes les langues
select p2.product_id ,coalesce(p2.name, p1.name, 'No name') as name ,coalesce(p2.description, p1.description, 'No description') as description from product p2 left join product p1 on( p1.product_id = p2.product_id and p1.language_id = 1 ) where p2.product_id = 1 and p2.language_id = 2; Edit1: The above query assumes that the language=2 row exist but that the name/descr may be null.Edit 2. I just remembered someone asked a similar question recently. And then I discovered it was you. You need to separate the products from the translations. That is what is making this query hard to write. Thomas answer makes it easy to do what you want.
Mec c'est vraiment une pensée de merde. Aller au sommeil Ronnis!
Et si la langue = 2 n'existe pas? Aucune garantie qu'il existera, en fait.
Les questions étaient différentes. La question précédente traitait de la modélisation. Thomas a fourni une suggestion sur la manière de modéliser et d'interroger les données. J'ai décidé d'utiliser une approche de modélisation qui diffère de la suggestion de Thomas. Maintenant, j'ai besoin de pouvoir interroger cela de la même manière que la suggestion de Thomas.
Que diriez-vous de cela? Où: P>
@pid code>: ID de produit actuel LI>
@LID code>: ID de langue actuelle li>
nom code> et / ou
Description code> pourrait être null li>
langue_id code> = 2 élément n'a pas pu exister li>
ul> p>
Assomption: il y a une entrée pour chaque produit avec Un autre sujet est si vous souhaitez que le comportement que vous avez demandé .. Parce que vous pouvez avoir des langages mixtes entre langue = 1 code>
Le code ci-dessous est juste simple SQL pour récupérer ce que vous voulez.
nom code> et
description code>. Je le concevrais différemment, si l'un des deux champs est vide, je retournerais par défaut dans la langue principale (1). P>
select p.product_id,
coalesce(pl.name, p.name, 'No name') as name,
coalesce(pl.description, p.description, 'No description') as description
from product p
left join product pl on (pl.product_id = p.product_id and pl.language_id = :language_id)
where p.product_id = :product_id and p.language_id = 1
Voici un exemple d'utilisation avec SQL Update:
C'est comme équivalent à la NVL d'Oracle.
Vous pouvez l'utiliser comme ci-dessous dans une instruction préparée à l'aide de paramètres p>