2016-11-30 50 views
1

我怎样才能返回两个表的匹配。获得来自多个表的匹配在MySQL

表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; 

表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; 

现在我想创造出中选择具有两个表中的任何比赛的所有字段的查询。 如果可能的话,还有另一行说明每行有多少匹配字段。

+1

这些表基本上是相同的,除了实际的表名 - 为什么不模型都“丢失”和“发现”的项目与不同的“身份”或“类型”字段中的一个表来表示它是否丢失或发现了什么?简单。您的查询然后通过一种或另一种类型进行聚合同样更容易。 –

+0

创建'view'与两个表'内join'和'insert'到像'插入到匹配选择另一个表*从matching_view_v;' – Viki888

回答

1

不知道我的理解,这是你想要的吗?

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的计算布尔表达式为1为FALSE TRUE和0,所以你可以总结出列的比较。

注意,您的表是完全一样的,这不是一个推荐的设计。我建议您添加另一列TYPE,这将节省lost/found并组合这两个表。

相关问题