MySQL объединяет результаты в поле, имеющее нули в каждой строке набора результатов - PullRequest
0 голосов
/ 10 декабря 2011

Я пытаюсь объединить две таблицы, как это ...

SELECT * FROM lists l
INNER JOIN products p USING (list_id)

Вот show create table для обеих таблиц.

CREATE TABLE `lists` (
  `list_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `list_name` varchar(255) NOT NULL,
  `deleted` tinyint(4) NOT NULL DEFAULT '0'
  PRIMARY KEY (`list_id`),
  KEY `index1` (`list_name`),
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

CREATE TABLE `products` (
  `product_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `list_id` bigint(20) unsigned NOT NULL DEFAULT '0',
  `deleted` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`product_id`),
  KEY `index2` (`deleted`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8

Вот результат вышеприведенного запроса:

l.list_id: l.list_name: l.deleted: p.product_id: p.deleted

1   Christmas   0   1   1
1   Christmas   0   2   0
1   Christmas   0   3   0
1   Christmas   0   4   0
4   New Year    0   8   0
4   New Year    0   9   0
4   New Year    0   10  0

Вы видите l.deleted столбец там со всеми нулями? В таблице lists есть некоторые строки с другими значениями, такими как 1, 2, ... в столбце deleted. Но при объединении таблиц всегда отображается столбец deleted, в котором есть все нули.

Почему это происходит? Что мне здесь не хватает?

1 Ответ

0 голосов
/ 10 декабря 2011

Я предлагаю вам использовать другой синтаксис для выражения JOIN. Если вы используете синтаксис ON, у вас будет больше ясности относительно того, что соединяется с чем. Это стилистически.

Попробуйте это:

SELECT * FROM lists l
INNER JOIN products p ON l.list_id = p.list_id

Но, я подозреваю, у вас есть элементы в вашей таблице lists (со значениями столбцов deleted, которые не равны нулю, и которые не отображаются в вашей таблице products. Чтобы увидеть те из них в вашем наборе результатов, попробуйте это:

SELECT * FROM lists l
LEFT JOIN products p ON l.list_id = p.list_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...