MySQL выбрать, где идентификатор находится в (выберите другую таблицу) - PullRequest
0 голосов
/ 20 сентября 2018

проблема в том, что мне нужно выбрать значения из таблицы

category_filter_relations

id   modification_id

, где мой введенный идентификатор модификации равен переменной, а также мне нужно присоединиться к другой таблице

category_filter_relations_items

id   modification_id   category_filter_relation_id

, гдеможет быть несколько записей с одинаковыми modification_id и разными category_filter_relation_id, и мне нужно выбрать эти category_filter_relations элементы.

Мой запрос:

SELECT cfr.id AS category_filter_relation_id, 
       cfr.modification_id,
FROM category_filter_relations cfr
WHERE 1
AND cfr.modification_id = '18340300'
AND category_filter_relation_id 
IN (SELECT category_filter_relations_items.category_filter_relation_id 
    FROM category_filter_relations_items 
    WHERE category_filter_relations_items.modification_id = '18340300')

И таким образом я получаюошибка:

Неизвестный столбец 'category_filter_relation_id' в 'IN / ALL / ANY subquery'

Также я пытался присоединиться к

LEFT JOIN category_filter_relations_items ON (category_filter_relations_items.category_filter_relation_id = category_filter_relation_id)

, нотаким образом я получаю все записи из таблицы category_filter_relations_items и мне нужны записи из

category_filter_relations where category_filter_relations.modification_id = 18340300

, объединенные с

category_filter_relations_items.category_filter_relation_id where category_filter_relations_items.modification_id = 18340300

Пример данных того, что мне нужно:

category_filter_relations
id    modification_id
23796 18340300

category_filter_relations_items 
id      category_filter_relation_id  modification_id     
54690   23270                        18340300

Я выбираю таблицу category_filter_relations, и результат должен быть:

id    modification_id
23796 18340300
23270 11111111

Это заняло id 23270, потому что category_filter_relations_items.modification_id был равен 18340300

1 Ответ

0 голосов
/ 20 сентября 2018

Это ваши таблицы:

category_filter_relations
=========================
id |  modification_id

и

category_filter_relations_items
===================================================
id | modification_id | category_filter_relation_id

В вашем запросе вы делаете:

SELECT cfr.id AS category_filter_relation_id, -- You select the category_filter_relations id
       cfr.modification_id,                   -- You select the modification_id
FROM category_filter_relations cfr            -- Both from the table category_filter_relations
WHERE 1
AND cfr.modification_id = '18340300'          -- You add a condition on the modification_id
AND category_filter_relation_id               -- You add a condition on an id not in the table category_filter_relations
IN (SELECT category_filter_relations_items.category_filter_relation_id 
    FROM category_filter_relations_items 
    WHERE category_filter_relations_items.modification_id = '18340300')

Вывод, который вы хотите:

id    modification_id
23796 18340300
23270 11111111

Как это возможно, если вы добавляете условие AND cfr.modification_id = '18340300'?Вы не можете получить modification_id = 11111111, если только попросите modification_id = '18340300'.

Так что попробуйте это:

SELECT cfr.id, 
       cfr.modification_id,
FROM category_filter_relations cfr
WHERE cfr.modification_id = '18340300'

UNION

SELECT cfri.id, 
       cfri.modification_id,
FROM category_filter_relations_items cfri
INNER JOIN category_filter_relations cfr ON cfr.id = cfri.category_filter_relation_id
    AND cfr.modification_id = '18340300'

Таким образом, вы получите первый ряд из category_filter_relations со столбцомимя id (id из category_filter_relations) и modification_id (modification_id из category_filter_relations), что равно «18340300» из-за условия.

UNIONтеперь будет также столбец id, но теперь это id таблицы category_filter_relations_items и столбец modification_id, которые будут modification_id строки category_filter_relations_items, где category_filter_relation_id - id таблицы category_filter_relations с modification_id = 18340300.

Это то, что вы ищете?

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