0
votes

MySQL rejoindre deux tables (+ limite basée sur la première table)

J'ai 2 tables comme celles-ci: -

|----------------------------|
|OfferNum|colour|availability|
|a1      |blue  |yes         |
|a1      |red   |no          |
|a2      |green |yes         |
|----------------------------|


5 commentaires

La première page contiendrait donc 2 + 1 + 5 rangées?


Postez votre schéma de table


@Quest Select * à partir de Offres , couleurs où offres.offernum = colours.offernum et colours.Offernum In (Sélectionnez Offernum à partir de l'ordre de Offre par Offernum ASC Limite 0,3) - Cette fois et laissez-moi savoir si ça marche ou non


Salman A: Oui, il contiendrait un total de 8 rangées


RIPA SAHA: Cela donne cette erreur: - Vérifiez le manuel qui correspond à votre version de Server MySQL pour la syntaxe de droite à utiliser à proximité 'Sélectionnez Offernum à partir de Offres Order Par Offernum ASC Limit 0,3) LI


3 Réponses :


1
votes

Déplacez la clause limite à l'intérieur d'une sous-requête et rejoignez-la:

SELECT offers2.OfferNum, items.colour, items.availability
FROM (SELECT * FROM offers ORDER BY id LIMIT 0, 3) AS offers2
JOIN items ON items.OfferNum = offers2.OfferNum
ORDER BY ...


5 commentaires

Cela donne l'erreur: - # 1064 - Vous avez une erreur dans votre syntaxe SQL. Vérifiez le manuel qui correspond à votre version MySQL Server pour la syntaxe de droite à utiliser à proximité 'Select * à partir de la commande OFFERTS par ID Limite 0, 3) Comme Offre2 Rejoindre i


Aucune erreur de syntaxe ici: dbfiddle.uk/...


Sur ma boîte de production, j'utilise une ancienne version MySQL (4.0.23-NT). Cela peut-il être un problème?


Y a-t-il un moyen de vérifier si la version 4 de MySQL peut faire une requête d'alias de table? J'apprends seulement - pas un expert. Merci!


Cela n'utilise aucune syntaxe de fantaisie. Et MySQL 4 est Sooooo Old qu'ils ne maintiennent même pas sa documentation, désolé.



2
votes

Si je comprends correctement, vous souhaitez afficher 3 offres de la table des offres et affiche toutes les valeurs équivalentes de la deuxième table à côté, vous pourriez envisager de sélectionner les données que vous souhaitez avoir en tant que base, comme:

SELECT customOffers.OfferNum, items.colour, items.availability
FROM 
(SELECT OfferNum
    FROM offers
ORDER BY id ASC 
    LIMIT 0 , 3) as customOffers
    JOIN items ON items.OfferNum = offers.OfferNum


9 commentaires

Je dois récupérer des rangées de tabales jointes pour les traiter via php. Le 2e script ci-dessus donne cette erreur: - Vous avez une erreur dans votre syntaxe SQL. Vérifiez le manuel qui correspond à votre version de serveur MySQL pour la syntaxe droite à utiliser à proximité 'Sélectionnez Sélectionnez Offernum à partir de la commande d'ID ASC Limite 0


J'ai déjà exécuté les mêmes requêtes avec différents noms de table et noms de colonnes avant d'écrire cette réponse et il n'a pas déclenché une erreur, comme il semble que votre serveur reconnaît la virgule de manière différente, je suppose que votre erreur manque la partie. Après la virgule, qui est 3, et je pense d'abord, vous devez vérifier quel type de séparateur est défini dans vos paramètres régionaux, la deuxième pensée est que vous pourriez avoir une syntaxe spécifique pour la sélection de la table et de la colonne si vous utilisez un phpmyadmin par exemple, puis vous avez besoin Sélectionnez `Offernum` à partir de` Offres` Commande par `Id'id` ASC Limit 0, 3


Une instruction Select normale fonctionne, y compris la limite de 0,3 et sans l'accent grave (`). Ce problème est le plus probablement lié à la version. Je vais installer MySQL 5 A et voir. Va mettre à jour plus tard.


Pourriez-vous s'il vous plaît vérifier d'abord vos paramètres régionaux? Quel symbole est spécifié comme séparateur? Pour expliquer comment vérifier, j'ai besoin de savoir quel système opérationnel exécutez-vous le serveur.


PHPMYADMIN 2.6.1 + MySQL 4.0.23-NT sous Windows XP. Vieux, je sais mais ils ont fait le travail jusqu'à présent. Ce n'est que cette sous-requête qui ne fonctionne pas!


Les sous-requêtes ne sont pas prises en charge dans des versions inférieures à mysql 4.1 Stackoverflow.com/Questtions/5194036/...


Wow, c'est bizarre, je ne m'attendais jamais à ce que le résultat ... Mais si vous êtes capable de vérifier une chose pour moi, je suis curieux panneau de commande -> horloge, langue et région -> Modifier la date, l'heure ou le numéro format et là dans onglet vous devez avoir regroupement de chiffres symbole et symbole décimal , pouvez-vous me dire quels symboles sont assignés et à quelle propriété?


Je peux voir cela dans les options régionales et linguistiques Numéro: 123 456 789,00 Monnaie: 123,456 789,00 $ Temps: 9:30:02


Merci d'avoir fourni des informations supplémentaires, ma suspicion est partie.



0
votes

Le problème était avec MySQL 4.0.

Les sous-requêtes ne sont pas prises en charge dans des versions inférieures à MySQL 4.1 Query SQL SQL ne fonctionne pas sur MySQL 4

Plus de détails ici: http://dev.mysql.com /doc/refman/4.1/fr/subqueries.html

Pour une solution rapide, j'ai installé MySQL 4.1 et les deux réponses d'Irakli Gigiberia et de Salman une œuvre.

Merci beaucoup pour votre aide.


0 commentaires