Мне нужно извлечь значения с помощью функции LENGTH из 2 разных таблиц, но использовать только 1 запрос - PullRequest
0 голосов
/ 27 марта 2019

У меня есть 2 очень простые таблицы, каждая из которых содержит только 1 столбец.В таблице «мясо» перечислены 8 или 9 различных видов мяса, а в таблице «сыры» перечислены различные сыры.

Я знаю, как извлечь из любой таблицы все значения, содержащие более 5 символов (пример: SELECT * from cheeses WHERE LENGTH(c_item) > 5;), которое возвращает любое имя сыра, содержащее более 5 символов в имени.

Но когда я пытаюсь объединить оба типа, например:

SELECT
    *
FROM
    meats
JOIN
    cheeses
WHERE LENGTH(m_item) OR LENGTH(c_item) > 5;

, я не только получаю декартово значение, НО ВСЕ ПУНКТЫ ПЕРЕЧЕНЬ независимо от количества символов в их именах.

Школьное задание состоит в создании запроса, который извлекает только имена мяса и сыров с 5 (или более) символами, и делает это водин запрос!

Я пробовал различные соединения, союзы, макеты синтаксиса (например, включая использование ключевого слова WHERE перед каждой функцией, замена И для ИЛИ и т. д.

Мне нужно это:

SELECT * from cheeses WHERE LENGTH(c_item) > 5;

и это:

SELECT * from meats WHERE LENGTH(m_item) > 5;

объединены в одно утверждение.

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Со школьным заданием немного трудно угадать точные требования извне, но это звучит как union сценарий использования.

Однако, обратите внимание, что функция length() возвращает длину в байтах , а не в символах. Функция char_length() возвращает длину в символах.

SELECT * from cheeses WHERE CHAR_LENGTH(c_item) > 5
UNION ALL
SELECT * from meats WHERE CHAR_LENGTH(m_item) > 5; 

Также, обратите внимание, что union требует, чтобы запросы имели одинаковое количество полей, и их типы данных также должны быть совместимы друг с другом. Таким образом, если ваши таблицы cheeses и meats имеют разное количество столбцов или столбцов с разными типами данных в одной и той же порядковой позиции, то вам необходимо соответствующим образом настроить запросы, вы не можете просто использовать select *.

0 голосов
/ 27 марта 2019
SELECT * from cheeses WHERE LENGTH(c_item) > 5
UNION ALL
SELECT * from meats WHERE LENGTH(m_item) > 5;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...