0
votes

Créer une vue et rejoindre 2 tables requises

Je suis moi-même attaché à des nœuds sur celui-ci, alors j'espère que quelqu'un peut aider.

Je dois créer une table d'affichage et rejoindre 2 tables ensemble, mais il suffit d'afficher des entrées avec des données manquantes.

Donc, j'ai une table qui répertorie les drones que je possède, y compris le fabricant, le numéro de série et la date achetée, et j'ai une autre table qui répertorie les données de maintenance, y compris le type de maintenance reçu chaque appareil reçu. Ce tableau inclut également des données similaires à la première table.

Je dois tirer les données du périphérique de la première table et comparer celle-ci à la table de maintenance et afficher les drones qui n'ont pas reçu de type de maintenance particulier.

C'est ce que j'ai essayé xxx

mais cela donne une table vide, toutes les suggestions sur l'endroit où je vais mal? < / p>


7 commentaires

À noter, la raison pour laquelle vous n'obtenez aucun résultat est que vous utilisez un joint interne drone.type à null ( Ce que je pense que vous avez conçu un null "valeur" et non la chaîne "null" ). Un null n'a aucune valeur et ne peut être égal à rien, même un autre null .


Si "Cette table inclut également des données similaires à la première table." signifie que vous avez des données dupliquées de la table Drone , vous voudrez peut-être reculer et regarder votre table. Concevoir à nouveau.


@Shawn Ce n'est pas ma conception de table, c'est ce que j'ai reçu pour travailler avec le cadre d'un exercice :)


Comment ces tables se rapportent-elles les unes aux autres? Je vois qu'il se lie sur type , mais qu'est-ce que type se réfère? Est-ce une clé primaire dans drones ou entretien ? Avez-vous un exemple de données que vous regardez?


@Shawn donc table 1 est drone, consiste en un fabricant (clé PRI), série (clé PRI) et type: drone_types Tableau 2 est la maintenance, consiste en un fabricant (clé PRI), série (Touche PRI), type: Maintenance_type si je demande '' 'Sélectionnez * à partir de la maintenance' '' Je reçois un résultat de 5 drones qui ont eu entretien de types variables. Si j'existais '' '' 'Select * de drone' '', je reçois le résultat de 6 drones. J'ai donc besoin d'écrire une requête qui me donne le 1 drone qui n'a pas eu de maintenance.


Donc, il n'y a qu'un seul enregistrement entretien pour chaque drone? Qu'est-ce que série dans les deux tables? Ils ne peuvent pas être un lien sur type car ces valeurs signifient différentes choses dans les deux tables. dbfiddle.uk fonctionne très bien pour cela. Ou sqlfiddle.com .


Les recherches contre les vues dans MySQL ont un accès limité aux indices sous-jacents, ce qui, à mon avis, pratiquement inutile. Pour une aide supplémentaire, voir meta.stactverflow.com/questions/333952/...


3 Réponses :


1
votes

Je pense que vous voulez que vous souhaitez un jointure gauche de gauche : xxx

notes:

  • à chek for Nullity, vous avez besoin du NULL construction (votre code vérifie la chaîne litterne 'null' ):

  • Si vous souhaitez afficher le type de maintenance, vous devez prendre ces informations à partir de la table Drone plutôt que dans la table Maintenance < / li>

    Vous pouvez également en formuler une phrase avec un n'existe pas condition et une sous-requête corrélée: xxx


6 commentaires

Merci pour la réponse :) La table Drone ne contient aucune information de maintenance qui réside uniquement dans la table de maintenance elle-même. Tous les drones sauf 1 ont été mis en service, ce que j'essaie de faire est de tirer ceux qui n'ont rien eu du tout, ergo, restent intégrés


@Khelmon: La requête produise-t-elle le résultat que vous attendez?


Il produit une table peuplée, mais dans la colonne de maintenance, je vois les types de drones répétés


Juste FYI: Je ne sais pas si MySQL se comporte de même que SQL Server, mais dans les versions modernes, le où il n'existe pas est généralement plus rapide.


@Khelmon Depuis que vous filtrez essentiellement des résultats correspondants à partir de la table Maintenance , il suffit de remplacer d.type comme maintenance avec '' comme maintenance . Vous avez juste besoin de la chaîne vide. Ou juste laisser cette colonne tout ensemble. Vous n'en avez pas vraiment besoin pour les données que vous avez demandées.


@Shawn Qu'est-ce que j'ai fait 6 drones achetés, 5 d'entre eux ont été commandés au cours d'un cycle de maintenance. La table de maintenance contient les données de tous les cycles de maintenance et les tables de drones contiennent tous les drones achetés. Ce que je tente de faire est de créer une table d'affichage qui affiche uniquement les drones qui n'ont pas encore été commandés. Pour moi, c'est un exercice d'utilisation d'une jointure, mais cela a frappé mon cul pour les 2 derniers jours :)



0
votes

est NULL a raison et rejoindre droit parce que NULL dans la maintenance de la table droite
Essayez-le: Sélectionner un drone distinct.Manufacturer en tant que fabrication, drone.séral, drone.type, drone.parchase_date, maintenance.type comme maintenance De Drone Drone Drone Rejoindre Maintenance sur drone.type = maintenance.type Où la maintenance.type est null;


2 commentaires

Dans mon expérience, une jointure droite est généralement un rejoindre qui aurait dû être.


Merci pour votre réponse, cela m'a également donné une table vide: /



0
votes

Basé sur votre dernier commentaire:

Prenez-le pas à pas et construisez ce que vous voulez faire (nous allons combiner ces ensembles plus tard) .... p>

  1. Vous cherchez à consulter tous vos drones. Alors sélectionnons des colonnes à partir de drones code> pour voir ce qui est là. p>

    manufacturer           | serial | type | purchase_date      
    :--------------------- | -----: | ---: | :------------------
    Aerial Robotic Systems |      2 |   10 | 2020-02-01 00:00:00
    Titan Aerospace        |      6 |  200 | 2020-06-01 00:00:00
    


0 commentaires