2016-11-30 49 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並組合這兩個表。

相關問題