私はテーブル、例えば、country_previousと別のテーブルcountry_currentを持っています。どちらも構造は同じですが、名前だけが異なります。以下にそれらの構造を参照してください。MySQLの外部結合テーブルと同様のテーブル
CREATE TABLE `country_previous` (
`name` varchar(70) NOT NULL DEFAULT '',
PRIMARY KEY (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 MAX_ROWS=100000000 AVG_ROW_LENGTH=50
、他方
CREATE TABLE `country_current` (
`name` varchar(70) NOT NULL,
PRIMARY KEY (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
名が示すように、一年前に言って、までcountry_previousは、すべての国の名前を持ち、そしてcountry_currentはすべての国を持っています今まで。ですから、country_previousの最後の更新後に作成されたすべての国を取得したいと思います。私はこのクエリを試しましたが、 ですが、country_previousの多くのエントリがあります。
SELECT count(*) FROM country_previous NATURAL RIGHT OUTER JOIN country_current WHERE country_previous.name IS NULL;
これは、予想以上に多くなります。たとえば:私のcountry_previousには90カ国、country_currentには110カ国があります。それから、110-90 = 20の新しい国(country_previousの最後の更新)を取得する必要があります。しかし、私は20を超えます。
何が問題なのですか?
ありがとうございます。
PS:この国のアイデアは、実際に私が本当に必要としていることを他の人に理解させるのに役立ちます。実際に国名で何もしません。
このテーブル構造ではこれを行うことはできません。 両方のテーブルの名前が異なるため、米国は米国と一致しないため、2つのテーブルを結合するポイントはありません。比較する他の列はありません。 – Zohaib
Zohaib、以前は重要な点を追加していなかったことを申し訳なく思っています。私はちょうどそれで私のポストを更新しました。 PS:この国のアイデアは、本当に必要なものを他の人に理解させるのに役立ち、実際には国名を使って何もしません。 –
また、名前プロパティを主キー/一意識別子として使用することは危険であると考えられます。名前にスペルミスがあり、それを変更した場合は、そのPK/IDも暗黙的に変更されています。そのPK/IDを参照するものはすべて更新する必要があります。自動インクリメントIDフィールドなどの代理キーを持つことで、nameプロパティの変更は、リレーショナル・インテグリティには影響しません。 – MatBailie