2009-09-10 7 views
0

Étant donné le schéma/données/sortie suivant, comment formater une requête SQL pour donner la sortie résultante?MySQL SQL Sous-requête?

Créer un rapport TABLE (
id BIGINT AUTO_INCREMENT,
nom VARCHAR (255) NOT NULL UNIQUE,
source de VARCHAR (255) NOT NULL UNIQUE,
PRIMARY KEY (id)
) MOTEUR = INNODB;

CREATE TABLE champ (
id BIGINT AUTO _ INCREMENT,
nom VARCHAR (255) NOT NULL UNIQUE,
REPORT_ID BIGINT,
PRIMARY KEY (id)
) MOTEUR = InnoDB;

ALTER TABLE déposé ADD FOREIGN KEY (report_id) REFERENCES état (id) ON DELETE CASCADE;

rapports:
id, le nom, la source
1 rapport1 source1
2 rapport2 Source2
3 rapport3 source3
4 rapport4 source4

champ:
id, nom, REPORT_ID
1 prénom 3
2 nom de famille 3
3 âge 3
4 état 4
5 ans 4
6 Rang 4

sortie prévue pour le terme "rang d'âge"
de REPORT_ID, report_name, num_fields_matched
3 rapport3 1
4 rapport4 2

Merci d'avance!

+0

Btw, comment pouvez-vous mettre deux valeurs "Age" dans la table "Field" lorsque la colonne "name" est UNIQUE? –

+0

C'était mon erreur. Je me suis devancé. Après avoir testé votre code, j'ai dû modifier le schéma pour supprimer quelques instructions uniques. Merci encore. –

Répondre

0

Cette requête renverra tous les rapports avec les mots dont vous avez besoin.

SELECT * 
FROM report r 
INNER JOIN field f ON r.id = f.report_id 
WHERE name IN ('age','rank') 

Vous devez l'imbriquer. Donc la dernière requête est:

SELECT a.id, a.name, COUNT(*) 
FROM 
(
    SELECT r.id, r.name 
    FROM report r 
    INNER JOIN field f ON r.id = f.report_id 
    WHERE f.name 
    IN ('age', 'rank') 
)a 
GROUP BY a.id, a.name