IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Requête SQL complexe


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 7
    Par défaut Requête SQL complexe
    Bonjour a tous !
    Je suis actuellement en train de créer des rapports pour glpi mais j'ai un problème.

    Je souhaiterais récupérer tous les PC de la base et afficher :
    nom
    numéro de série
    antivirus
    version de l'antivirus

    mais, si un pc n'a pas d'antivirus, je veux quand même l'afficher dans le résultat, que les sysadmin puissent le voir.

    la base de données est constituée de 151 tables ( que je vais vous épargner car seulement 4~5 tables sont nécessaires à ma requête )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    --
    -- Structure de la table `glpi_computers`
    --
     
    CREATE TABLE IF NOT EXISTS `glpi_computers` (
      `ID` int(11) NOT NULL auto_increment,
      `FK_entities` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_entities (ID)',
      `name` varchar(255) collate utf8_unicode_ci default NULL,
      `serial` varchar(255) collate utf8_unicode_ci default NULL,
      `otherserial` varchar(255) collate utf8_unicode_ci default NULL,
      `contact` varchar(255) collate utf8_unicode_ci default NULL,
      `contact_num` varchar(255) collate utf8_unicode_ci default NULL,
      `tech_num` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_users (ID)',
      `comments` text collate utf8_unicode_ci,
      `date_mod` datetime default NULL,
      `os` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_dropdown_os (ID)',
      `os_version` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_dropdown_os_version (ID)',
      `os_sp` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_dropdown_os_sp (ID)',
      `os_license_number` varchar(255) collate utf8_unicode_ci default NULL,
      `os_license_id` varchar(255) collate utf8_unicode_ci default NULL,
      `auto_update` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_dropdown_auto_update (ID)',
      `location` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_dropdown_locations (ID)',
      `domain` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_dropdown_domain (ID)',
      `network` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_dropdown_network (ID)',
      `model` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_dropdown_model (ID)',
      `type` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_type_computers (ID)',
      `is_template` smallint(6) NOT NULL default '0',
      `tplname` varchar(255) collate utf8_unicode_ci default NULL,
      `FK_glpi_enterprise` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_dropdown_manufacturer (ID)',
      `deleted` smallint(6) NOT NULL default '0',
      `notes` longtext collate utf8_unicode_ci,
      `ocs_import` smallint(6) NOT NULL default '0',
      `FK_users` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_users (ID)',
      `FK_groups` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_groups (ID)',
      `state` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_dropdown_state (ID)',
      `ticket_tco` decimal(20,4) default '0.0000',
      PRIMARY KEY  (`ID`),
      KEY `location` (`location`),
      KEY `os` (`os`),
      KEY `FK_glpi_enterprise` (`FK_glpi_enterprise`),
      KEY `date_mod` (`date_mod`),
      KEY `tech_num` (`tech_num`),
      KEY `name` (`name`),
      KEY `type` (`type`),
      KEY `model` (`model`),
      KEY `FK_groups` (`FK_groups`),
      KEY `FK_users` (`FK_users`),
      KEY `os_sp` (`os_sp`),
      KEY `os_version` (`os_version`),
      KEY `network` (`network`),
      KEY `domain` (`domain`),
      KEY `auto_update` (`auto_update`),
      KEY `ocs_import` (`ocs_import`),
      KEY `FK_entities` (`FK_entities`),
      KEY `is_template` (`is_template`),
      KEY `deleted` (`deleted`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=333 ;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `glpi_dropdown_software_category`
    --
     
    CREATE TABLE IF NOT EXISTS `glpi_dropdown_software_category` (
      `ID` int(11) NOT NULL auto_increment,
      `name` varchar(255) collate utf8_unicode_ci default NULL,
      `comments` text collate utf8_unicode_ci,
      PRIMARY KEY  (`ID`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `glpi_software`
    --
     
    CREATE TABLE IF NOT EXISTS `glpi_software` (
      `ID` int(11) NOT NULL auto_increment,
      `FK_entities` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_entities (ID)',
      `recursive` tinyint(1) NOT NULL default '0',
      `name` varchar(255) collate utf8_unicode_ci default NULL,
      `comments` text collate utf8_unicode_ci,
      `location` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_dropdown_locations (ID)',
      `tech_num` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_users (ID)',
      `platform` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_dropdown_os (ID)',
      `is_update` smallint(6) NOT NULL default '0',
      `update_software` int(11) NOT NULL default '-1' COMMENT 'RELATION to glpi_software (ID)',
      `FK_glpi_enterprise` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_dropdown_manufacturer (ID)',
      `deleted` smallint(6) NOT NULL default '0',
      `is_template` smallint(6) NOT NULL default '0',
      `tplname` varchar(255) collate utf8_unicode_ci default NULL,
      `date_mod` datetime default NULL,
      `notes` longtext collate utf8_unicode_ci,
      `FK_users` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_users (ID)',
      `FK_groups` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_groups (ID)',
      `oldstate` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_dropdown_state (ID)',
      `ticket_tco` decimal(20,4) default '0.0000',
      `helpdesk_visible` int(11) NOT NULL default '1',
      `category` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_dropdown_software_category (ID)',
      PRIMARY KEY  (`ID`),
      KEY `platform` (`platform`),
      KEY `location` (`location`),
      KEY `FK_glpi_enterprise` (`FK_glpi_enterprise`),
      KEY `date_mod` (`date_mod`),
      KEY `tech_num` (`tech_num`),
      KEY `name` (`name`),
      KEY `FK_groups` (`FK_groups`),
      KEY `FK_users` (`FK_users`),
      KEY `update_software` (`update_software`),
      KEY `FK_entities` (`FK_entities`),
      KEY `is_template` (`is_template`),
      KEY `is_update` (`is_update`),
      KEY `deleted` (`deleted`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3497 ;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `glpi_softwareversions`
    --
     
    CREATE TABLE IF NOT EXISTS `glpi_softwareversions` (
      `ID` int(11) NOT NULL auto_increment,
      `sID` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_software (ID)',
      `state` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_dropdown_state (ID)',
      `name` varchar(255) collate utf8_unicode_ci default NULL,
      `comments` text collate utf8_unicode_ci,
      PRIMARY KEY  (`ID`),
      KEY `sID` (`sID`),
      KEY `name` (`name`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3740 ;
    Pour le moment, j'ai donc fait une ébauche de requette :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT * 
        FROM `glpi_computers` C
        LEFT OUTER JOIN  glpi_inst_software ISOFT
            ON C.ID = ISOFT.cID NOT IN ( SELECT * FROM SOFT WHERE SOFT.category = 2)
        LEFT OUTER JOIN  glpi_softwareversions VSOFT
            ON ISOFT.vID = VSOFT.ID 
        LEFT OUTER JOIN glpi_software SOFT
            ON VSOFT.ID = SOFT.ID
        WHERE SOFT.category = 2
    category 2 étant la catégorie des antivirus.
    Mais le problème avec ma requête, c'est que j'affiche UNIQUEMENT les PC qui ont un antivirus, et je voudrais voir les deux.

    Si quelqu'un a une idée ?

    D'avance merci

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 255
    Par défaut
    C'est quoi ce NOT IN (...) qui traine dans ta requete.

    A première vue, pour moi, il n'est pas necessaire.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Data Analyste Senior
    Inscrit en
    Août 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data Analyste Senior
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2010
    Messages : 53
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    C'est quoi ce NOT IN (...) qui traine dans ta requete.

    A première vue, pour moi, il n'est pas necessaire.
    Même remarque.

    Ca donne quoi à l'exécution quand tu l'enlèves ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 7
    Par défaut
    Ça faisait partie de mes essais "à tatons" il ne sert a rien.
    Si je le vire je récupère la liste des pc ayant un antivirus

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 503
    Par défaut
    Bonjour,
    Perso je ferai ceci:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT * 
    	FROM `glpi_computers` C
    	LEFT OUTER JOIN  glpi_inst_software ISOFT
    		ON C.ID = ISOFT.cID and SOFT.category = 2
    	LEFT OUTER JOIN  glpi_softwareversions VSOFT
    		ON ISOFT.vID = VSOFT.ID 
    	LEFT OUTER JOIN glpi_software SOFT
    		ON VSOFT.ID = SOFT.ID

    Ainsi tu as toutes les machines, et les données de l'antivirus le cas échéant.

    Tatayo.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 7
    Par défaut
    Merci !
    J'ai essayé ta requête mais je prends un beau petit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1054 - Unknown column 'SOFT.category' in 'on clause'
    ce qui me parait normal étant donné qu'on crée l'alias SOFT au niveau de la dernière jointure.

    J'ai donc essayé de faire ma requête sans alias, mais ça ne marche pas non plus, je prend des erreusr du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Erreur
     
    requête SQL: Documentation
     
    SELECT *
    FROM `glpi_computers` C
    LEFT OUTER JOIN glpi_inst_software ISOFT ON glpi_software.ID = ISOFT.cID
    AND SOFT.category =2
    LEFT OUTER JOIN glpi_softwareversions VSOFT ON ISOFT.vID = VSOFT.ID
    LEFT OUTER JOIN glpi_software SOFT ON VSOFT.ID = SOFT.ID
    LIMIT 0 , 30
     
    MySQL a répondu:Documentation
    #1054 - Unknown column 'glpi_software.ID' in 'on clause'

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. requête sql complexe
    Par julien_d dans le forum SQL
    Réponses: 7
    Dernier message: 01/05/2007, 18h03
  2. Requète SQL complexe
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 01/08/2006, 11h10
  3. Requête sql complexe
    Par new_wave dans le forum Langage SQL
    Réponses: 1
    Dernier message: 03/01/2006, 12h55
  4. Requête SQL Complexe
    Par zut94 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 25/11/2005, 21h53
  5. Requête SQL complexe. Comment faire ....
    Par BilTCD dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/11/2004, 17h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo