У меня есть три таблицы описывает так:NATURAL JOIN не работает должным образом
+----------+ +-----------------+ +----------+
| products | | products_stores | | stores |
+----------+ +-----------------+ +----------+
| barecode | | #barecode | | storeID |
| name |----| #storeID |----| location |
+----------+ | price | +----------+
+-----------------+
создал их так:
CREATE TABLE IF NOT EXISTS `products` (
`barecode` varchar(100) NOT NULL UNIQUE,
`name` varchar(25) NOT NULL,
PRIMARY KEY (`barecode`)
);
CREATE TABLE IF NOT EXISTS `stores` (
`idStore` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(25) NOT NULL,
`location` varchar(100) NOT NULL,
PRIMARY KEY (`idStore`)
);
CREATE TABLE IF NOT EXISTS `products_stores` (
`idStore` int(10) NOT NULL,
`barecode` VARCHAR(100) NOT NULL,
`price` double NOT NULL,
FOREIGN KEY (`barecode`) REFERENCES `products`(`barecode`),
FOREIGN KEY (`idStore`) REFERENCES `stores`(`idStore`)
);
Я хотел, чтобы все продукт и его цену с правом магазина поэтому я попробовал NATURAL JOIN, но ничего не ответил (код ниже 1-). Поэтому я попробовал только один NATURAL JOIN только для проверки, и он работает (код ниже 2- и 3-).
1- SELECT * FROM products NATURAL JOIN products_stores NATURAL JOIN stores;
2- SELECT * FROM products JOIN products_stores NATURAL JOIN stores;
3- SELECT * FROM products NATURAL JOIN products_stores JOIN stores;
Я не понимаю, почему «двойной» NATURAL JOIN не работает. Кто-нибудь может мне помочь в этом? Спасибо.
Когда вы говорите 'не работает' ... что это значит? Вы получаете какую-либо ошибку? –
Являются ли имена столбцов в таблице 'products_stores' действительно' # barecode', или это символ фунта только для акцента? –
Нет, он ничего не возвращает. Пустая таблица, как описано при создании таблиц. @Tim: это действительно внешние ключи, и он работает только с одним естественным соединением, а не с двумя ... Не могу понять, почему – TDK