Как ВЫБРАТЬ из таблицы с JOIN с несколькими совпадающими значениями? - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть следующий простой запрос, который отлично работает, когда есть одно ключевое слово:

SELECT gc.id, gc.name 
FROM gift_card AS gc
JOIN keyword ON gc.id = keyword.gc_id 
WHERE keyword = 'mini'
GROUP BY gc.id 
ORDER BY id DESC

Я хочу найти id, которые соответствуют по крайней мередва ключевых слова я предоставляю.Я думал, что простое добавление AND будет работать, но я получу пустые результаты.

SELECT gc.id, gc.name 
FROM gift_card AS gc
JOIN keyword ON gc.id = keyword.gc_id 
WHERE keyword = 'mini'
AND keyword = '2012'
GROUP BY gc.id 
ORDER BY id DESC

Очевидно, что SQL - не моя сильная сторона, поэтому я ищу какую-то помощь, что я делаю здесь неправильно.

Вот мои структуры таблиц:

CREATE TABLE `gift_card` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8;

CREATE TABLE `keyword` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `gc_id` int(11) NOT NULL,
  `keyword` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_UNIQUE` (`id`),
  UNIQUE KEY `dupes_UNIQUE` (`gc_id`,`keyword`)
) ENGINE=InnoDB AUTO_INCREMENT=477 DEFAULT CHARSET=utf8;

1 Ответ

0 голосов
/ 26 апреля 2018

Нет, and не работает.Столбец не может иметь два разных значения в одной строке.

Вместо or.,,и немного больше логики:

SELECT gc.id, gc.name 
FROM gift_card gc JOIN
     keyword k
     ON gc.id = k.gc_id 
WHERE k.keyword IN ('mini', '2012')
GROUP BY gc.id 
HAVING COUNT(*) = 2  -- both match
ORDER BY id DESC;

Хорошая идея - квалифицировать все имен столбцов в запросе, который имеет более одной ссылки на таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...