2015-08-16 4 views
1

je dois avoir une valeur SQL qui trouve des valeurs de la table B à l'aide (randomiser) sur le tableau A de manière comparative. Les valeurs du tableau A ont été produites de manière aléatoire. Les valeurs de la table B ont été ordonnées d'une manière de fonction de distribution cumulative. Ce qui est nécessaire, c'est que SQL obtienne la première ligne de la table B qui satisfait aux critères.requête SQL dans MySQL contenant comparaison mathématique

 
Table A: 
+----+-------+ 
| ID | value | 
+----+-------+ 
| 1 | 0.1234| 
| 2 | 0.8923| 
| 3 | 0.5221| 
+----+-------+ 

Table B: 
+----+-------+------+ 
| ID | value | name | 
+----+-------+------+ 
| 1 | 0.2000| Alpha| 
| 2 | 0.5000| Beta | 
| 3 | 0.7500| Gamma| 
| 4 | 1.0000| Delta| 
+----+-------+------+ 

Result should be: 
+----+-------+------+ 
| ID | value | name | 
+----+-------+------+ 
| 1 | 0.1234| Alpha| 
| 2 | 0.8923| Delta| 
| 3 | 0.5221| Gamma| 
+----+-------+------+ 

La valeur 0.1234 est inférieure à toutes les valeurs de B, mais Alpha a la plus petite valeur.

valeur 0,8923 est inférieure à 1.000 -> Delta.

valeur 0,5221 est plus petite que les deux 0.7500 et 1.000, mais 0.7500 est le plus petit -> Gamma.

Cette requête ne fonctionne que si le tableau A a une valeur:

 
select value, name 
from B 
where (select value from A) < value; 

Toute idée comment obtenir ce travail avec une table complète A?

Répondre

1

Vous pouvez utiliser la sous-requête pour obtenir les données dont vous avez besoin:

SELECT a.ID, a.value, 
    (SELECT b.name FROM TableB b WHERE a.value < b.value ORDER BY b.ID ASC LIMIT 1) as name 
FROM TableA a 

Dans ce cas, pour chaque ligne dans le tableau A vous trouverez le premier enregistrement dans le tableau B, qui a plus grand nombre dans la colonne value. En fonction de vos besoins l'opérateur < pourrait beed être mis à jour <= - cela dépend de vos besoins

+0

utilisation limite dans une base MySQL .. – amdixon

+0

@amdixon Merci, j'ai oublié TOP est pas pris en charge MySQL – dotnetom

+0

Cela fonctionne comme un charme. Je vous remercie! – Parallax