2016-11-30 1 views
1

Comment puis-je retourner les correspondances de deux tables.Obtenir des correspondances à partir de plusieurs tables dans MySQL

Tableau 1:

CREATE TABLE `lost` (
    `id` int(11) NOT NULL, 
    `firstName` int(100) NOT NULL, 
    `lastName` varchar(100) NOT NULL, 
    `country` varchar(2) NOT NULL, 
    `address` varchar(100) NOT NULL, 
    `email` varchar(120) NOT NULL, 
    `color` varchar(32) NOT NULL, 
    `location` varchar(100) NOT NULL, 
    `airport` int(11) NOT NULL, 
    `dateReported` date NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

Tableau 2:

CREATE TABLE `found` (
    `id` int(11) NOT NULL, 
    `firstName` int(100) NOT NULL, 
    `lastName` varchar(100) NOT NULL, 
    `country` varchar(2) NOT NULL, 
    `address` varchar(100) NOT NULL, 
    `email` varchar(120) NOT NULL, 
    `color` varchar(32) NOT NULL, 
    `location` varchar(100) NOT NULL, 
    `airport` int(11) NOT NULL, 
    `dateReported` date NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

maintenant je veux créer une requête qui sélectionne tous les champs qui ont des matchs sur les deux tables. Et si possible une autre ligne qui indique combien de champs correspondants il a par ligne.

+1

ces tables sont essentiellement identiques, à l'exception du nom de la table - pourquoi ne pas modéliser les éléments 'lost' et 'found' sous forme de table unique avec différents champs 'status' ou 'type' pour représenter si elle est perdue ou a trouvé? plus simple. vos requêtes pour ensuite agréger par un type ou un autre sont également plus faciles. –

+0

Créer une 'vue' avec' inner join' sur les tables et 'insert' dans une autre table comme' insert dans select select * de matching_view_v; ' – Viki888

Répondre

1

Je ne suis pas sûr d'avoir compris, c'est ce que vous voulez?

SELECT t.*,s.*, 
     (t.firstName = s.firstName) + 
     (t.lastName = s.lastName) + 
     (t.country = s.country) + 
     (t.address = s.address) + 
     ..... as how_many_matches 
FROM `lost` t 
JOIN `found` s 
ON(t.id = s.id) 

MySQL évalue les expressions booléennes comme 1 pour TRUE et 0 pour FAUX, Pouvez-vous résumer simplement les comparaisons des colonnes. Notez que vos deux tables sont exactement les mêmes, ce n'est pas une conception recommandée. Je vous conseille d'ajouter une autre colonne TYPE qui permettra d'économiser lost/found et de combiner les deux tables.