Не уверен, как это назвать, - я уверен, что это нужно спрашивать в другом месте.
Рассмотрим следующее, например.
CREATE TABLE abbrv (
abbrv_id int unsigned primary key not null auto_increment,
usps_primary varchar(64) not null,
usps_preferred varchar(16) not null
);
CREATE TABLE abbrv_variation (
variation_id int unsigned primary key not null auto_increment,
abbrv_id int unsigned, -- FK
variation varchar(64) not null
);
INSERT INTO abbrv(usps_primary, usps_preferred) VALUES('North', 'N');
INSERT INTO abbrv(usps_primary, usps_preferred) VALUES('South', 'S');
INSERT INTO abbrv(usps_primary, usps_preferred) VALUES('East', 'E');
INSERT INTO abbrv(usps_primary, usps_preferred) VALUES('West', 'W');
INSERT INTO `abbrv` (usps_primary, usps_preferred) values('ALLEY', 'ALY');
SET @abbrvId = LAST_INSERT_ID();
INSERT INTO `abbrv_variation` (abbrv_id, variation) VALUES(@abbrvId, 'ALLEE');
INSERT INTO `abbrv_variation` (abbrv_id, variation) VALUES(@abbrvId, 'ALLY');
INSERT INTO `abbrv` (usps_primary, usps_preferred) values('ANEX', 'ANX');
SET @abbrvId = LAST_INSERT_ID();
INSERT INTO `abbrv_variation` (abbrv_id, variation) VALUES(@abbrvId, 'ANNEX');
INSERT INTO `abbrv_variation` (abbrv_id, variation) VALUES(@abbrvId, 'ANNX');
INSERT INTO `abbrv_variation` (abbrv_id, variation) VALUES(@abbrvId, 'ANX');
Я просто пытаюсь вернуть что-то вроде:
+--------------+----------------+-----------+
| usps_primary | usps_preferred | variation |
+--------------+----------------+-----------+
| North | N | North | <-- 1 row for "usps_primary"
| North | N | N | <-- 1 row for "usps_preferred"
| South | S | South | <-- 1 row for "usps_primary"
| South | S | S | <-- 1 row for "usps_preferred"
| East | E | East | <-- 1 row for "usps_primary"
| East | E | E | <-- 1 row for "usps_preferred"
| West | W | West | <-- 1 row for "usps_primary"
| West | W | W | <-- 1 row for "usps_preferred"
| ALLEY | ALY | ALLEY | <-- 1 row for "usps_primary"
| ALLEY | ALY | ALY | <-- 1 row for "usps_preferred"
| ALLEY | ALY | ALLEE | X-- one row for each
| ALLEY | ALY | ALLY | X-- variation
| ANEX | ANX | ANEX | <-- 1 row for "usps_primary"
| ANEX | ANX | ANX | <-- 1 row for "usps_preferred"
| ANEX | ANX | ANNEX | X-- one row for each
| ANEX | ANX | ANNX | X-- variation
Порядок не имеет значения - просто они все там. Первоначально в этой таблице просто были строки «вариантов» для каждого из них, но она стала неуправляемой, так как это очень большая таблица, чтобы гарантировать, что все эти строки вводятся каждый раз, когда добавляется новый вариант.
Конечно, я пробовал ЛЕВОЕ СОЕДИНЕНИЕ, КРЕСТНОЕ СОЕДИНЕНИЕ, ВНЕШНЕЕ СОЕДИНЕНИЕ, соединение некоторых слева и справа - я действительно не знаю, каков здесь правильный ход действий.
Перекрестное соединение кажется примерно правильным, но я не хочу всю серию, просто 2 раза каждая.