2016-11-30 18 views
1

2つのテーブルの一致を返すにはどうすればよいですか?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

実際のテーブル名を除いて、これらのテーブルは本質的に同一です。なぜなら、 'lost'と 'found'アイテムの両方を、 'status'フィールドまたは 'type'フィールドが異なる単一のテーブルとしてモデル化して、見つけた?簡単です。 1つのタイプまたは別のタイプで集約するクエリも同様に簡単です。 –

+0

両方のテーブルで 'inner join'を使って' view'を作成し、 'insert into matching select * from matching_view_v; 'のように別のテーブルに' insert'を行います。 – 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がTRUEのための1およびFALSEは0としてブール式を評価しますので、あなただけの列の比較をまとめることができます。

両方のテーブルがまったく同じであることに注意してください。これは推奨されたデザインではありません。 lost/foundを保存して2つのテーブルを結合する別の列TYPEを追加することをお勧めします。

関連する問題