J'ai la requête SQL suivante:
SELECT * FROM `test1` startswith ========== aaa bbb ccc SELECT * FROM `test2` text ==== aaa3k123k12312p03edwqeq aaa12313fwefrwerw aaafwre3we4232 bbb123123rwqe12e1
4 Réponses :
Déplacez la sous-requête et Joindre CODE>:
SELECT text
FROM `test2`
JOIN (select startswith from test1 ORDER BY RAND() LIMIT 1) t1
ON text LIKE concat(startswith,"%")
Cela reviendra simplement toutes les lignes de Test2 qui commencent par n'importe quel i> du démarrage dans Test1. Je veux choisir un démarrage au hasard de Test1 Table.
Cela me donne l'erreur: "Chaque table dérivée doit avoir son propre alias". Voir: dbfiddle.uk/...
Je vois que certains produits veulent cela, d'autres non. Va éditer.
Votre code semble être comme celui-ci et cette p> pour compléter votre code p> Sélectionnez * à partir du texte Test2where comme ===========% code> sans citations.
Si vous mettez des données temporaires sur votre requête, cela obtiendrait-il toujours les résultats?
Quelque chose comme
Cela ne produira pas les résultats que j'ai mentionnés dans la question. Voir: dbfiddle.uk/...
Utiliser le sous-sélection dans Rejoindre comme celui-ci
select t2.* from test2 as t2 join (SELECT RAND() as rand, startswith from test1 ORDER BY rand LIMIT 1) as t1 where t2.txt like CONCAT(t1.startswith,"%");
La raison pour laquelle votre code ne vous donne pas les résultats que vous attendez (par exemple, avec vos données d'échantillon, il renvoie parfois des valeurs commençant par Le moyen de créer une table dérivée de votre sous-requête - de sorte qu'elle ne soit évaluée que Notez que si AAA code> et
BBB code> ou Vous ne pouvez pas obtenir toutes les valeurs commençant par
aaa code>) est que le
où code> condition est évalué pour chaque ligne forte> de test2. Cela signifie que pour chaque ligne de test2, une valeur
test1 code> sont le début d'une valeur dans
test2 code>.
rejoindre code> que vers
test2 code> à l'aide de la comparaison code> comme code> que vous utilisez: p>
startwith code> est "CCC", vous n'obtiendrez aucun résultat dans la sortie de vos données d'échantillon. p> p>
Simplement supprimer l'ordre et limiter par la sous-requête?
@jarlh, si je fais cela, je reçois une erreur "SubQuery retourne plus d'une ligne".
Bien sûr ... faire une jointure à la place!