SQL запрос не соответствует ни одному результату - PullRequest
0 голосов
/ 11 июля 2020

Не знаю SQL. Я прочитал несколько руководств и собрал воедино этот запрос:

SELECT DISTINCT K.barcode 
FROM wp_weblib_keywords K, wp_weblib_collection C 
WHERE keyword LIKE Teen 
  AND keyword LIKE 7-12 && K.barcode = C.barcode 
ORDER BY C.barcode ASC

Я пытаюсь найти каждую книгу, в которой есть как ключевые слова «Подросток», так и «7–12» (мне нужно, чтобы в книге были оба ключевых слова, не только одно или другое). Вот как я инициализировал каждую таблицу:

CREATE TABLE weblib_keywords 
(
     keyword VARCHAR(64) NOT NULL,
     barcode varchar(16) not null check (barcode <> ''),
     KEY (keyword) 
) CHARACTER SET utf8;

CREATE TABLE weblib_collection 
(
     barcode varchar(16) not null unique check (barcode <> ''),
     title varchar(128) not null check (title <> ''),
     author varchar(64) not null check (author <> ''),
     PRIMARY KEY (barcode),
     KEY (title),
     KEY (author)
) CHARACTER SET utf8;

Думаю, проблема в том, что я не говорю SQL, в какой таблице искать, но я не уверен, как это написать. Спасибо за любую помощь!

Ответы [ 3 ]

2 голосов
/ 11 июля 2020

Попробуйте следующее: с помощью оператора Like вам нужно использовать подстановочный знак '%'

SELECT DISTINCT K.barcode FROM wp_weblib_keywords K inner join wp_weblib_collection C
on K.barcode = C.barcode
WHERE keyword LIKE '%Teen%' OR keyword LIKE '%7-12%' 
order by C.barcode 
1 голос
/ 11 июля 2020

Вы можете попробовать UNION в зависимости от объема ваших данных.

SELECT K.barcode FROM wp_weblib_keywords K 
inner join wp_weblib_collection C
on K.barcode = C.barcode
WHERE keyword LIKE '%Teen%' 
UNION
SELECT K.barcode FROM wp_weblib_keywords K 
inner join wp_weblib_collection C
on K.barcode = C.barcode
WHERE keyword LIKE '%7-12%' 

Почему UNION?

Изменить:

Если вы только нужно, чтобы они оба попробовали ниже. Для той же строки, если вы попробуете LIKE и AND вместе, это не даст вам результата. Вам следует подумать о том, чтобы снова присоединиться к той же таблице с другим псевдонимом и отдельно проверить свои ограничения.

SELECT c.barcode FROM wp_weblib_keywords K1 
inner join wp_weblib_collection C
on K1.barcode = C.barcode
inner join wp_weblib_keywords K2 
on K2.barcode = C.barcode
WHERE k1.keyword LIKE '%Teen%' and k2.keyword LIKE '%7-12%' 
group by c.barcode 
1 голос
/ 11 июля 2020

Если семантика wp_weblib_keywords_table должна включать одно ключевое слово в каждую строку, то этот запрос никогда не будет возвращать результаты (кроме проблем с форматированием).

Причина в том, что запрос просматривает каждую строку в таблица wp_weblib_keywords и пытается найти одну строку, в которой ключевое слово представляет собой два отдельных значения. Ну, в одной строке в таблице никогда не будет столбца, равного двум отдельным значениям.

Попробуйте следующее:

SELECT DISTINCT C.barcode 
FROM wp_weblib_collection C
INNER JOIN join wp_weblib_keywords K1 on C.barcode = K1.barcode 
INNER JOIN wp_weblib_keywords K2 on c.barcode = K2.barcode
WHERE k1.keyword = 'Teen' AND k2.keyword = '7-12' 
ORDER BY C.barcode 

Этот запрос вернет строки, если есть одна запись с ключевым словом ' Teen 'и еще одна запись с ключевым словом =' 7-12 '

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