示例数据库设计:
CREATE TABLE Countries
(`id` INT auto_increment primary key , `name` varchar(30))
;
INSERT INTO Countries
(`name`)
VALUES
('Germany'),('USA'),('Holland'),('Canada')
;
CREATE TABLE Groups_Countries
(`id` INT auto_increment primary key , Countries_ID int, Groups_id int)
;
INSERT INTO Groups_Countries
(Countries_id,Groups_id)
VALUES
(2,1),(4,1),(1,2),(3,2),(1,3),(2,3),(3,3),(4,3)
;
CREATE TABLE Groups
(`id` INT auto_increment primary key , `name` varchar(30))
;
INSERT INTO Groups
(`name`)
VALUES
('North America'),('Europe'),('The World')
;
SQL查询
SELECT c.name FROM Countries c
JOIN Groups_Countries gc
ON c.ID = gc.countries_ID
JOIN Groups g
ON g.id = gc.Groups_ID
WHERE g.name = 'North America';
SELECT c.name FROM Countries c
JOIN Groups_Countries gc
ON c.ID = gc.countries_ID
JOIN Groups g
ON g.id = gc.Groups_ID
WHERE g.name = 'Europe';
SELECT c.name FROM Countries c
JOIN Groups_Countries gc
ON c.ID = gc.countries_ID
JOIN Groups g
ON g.id = gc.Groups_ID
WHERE g.name = 'The World';
SQLFiddle demo
请结合表像group_countries持有的GROUP_ID和COUNTRY_ID所以会有不同的组标识为同一个国家ID多个条目 –
谢谢!有时你不会再想那么长的绳子。 – MSvelander