MYSQL - СОЗДАТЬ столбцы таблицы поиска в одну строку

0

У меня есть следующая структура таблицы:

Изображение 174551

tbl_catalogue_state
Изображение 174551

В tbl_catalogue есть номер детали 58674, который имеет три состояния в таблице tbl_catalogue_state_lk. Вот результат, когда я запускаю запрос, соединяющий три таблицы.

Изображение 174551

Как и ожидалось, возвращено несколько строк.

Есть ли способ вернуть только одну строку, имеющую значения для каждого файла catalgue_state_id в той же строке?

Мне также хотелось бы, чтобы игнорировать строку, например:

select tbl_catalogue.catalogue_part, tbl_catalogue_state.catalogue_state_id from tbl_catalogue
inner join tbl_catalogue_state_lk on tbl_catalogue.catalogue_id = tbl_catalogue_state_lk.catalogue_id
inner join tbl_catalogue_state on tbl_catalogue_state_lk.catalogue_state_id = tbl_catalogue_state.catalogue_state_id
where tbl_catalogue_state_lk.catalogue_state_id <> 1;

Вышеприведенный выбор по-прежнему возвращает две строки.

ОБНОВИТЬ

Я смог использовать GROUP_CONCAT:

select tbl_catalogue.catalogue_part, GROUP_CONCAT(tbl_catalogue_state.catalogue_state_id) as cat_state from tbl_catalogue
inner join tbl_catalogue_state_lk on tbl_catalogue.catalogue_id = tbl_catalogue_state_lk.catalogue_id
inner join tbl_catalogue_state on tbl_catalogue_state_lk.catalogue_state_id = tbl_catalogue_state.catalogue_state_id
where tbl_catalogue_state_lk.catalogue_state_id <> 1
group by tbl_catalogue.catalogue_id;

Моя проблема в приведенном выше заявлении по-прежнему возвращает строку. Мне нужно, чтобы он ничего не возвращал.

Теги:
inner-join

1 ответ

0

Я был в состоянии использовать не существует:

select tc.catalogue_part, GROUP_CONCAT(tcs.catalogue_state_id) as cat_state from tbl_catalogue as tc
inner join tbl_catalogue_state_lk as tcsl on tc.catalogue_id = tcsl.catalogue_id
inner join tbl_catalogue_state as tcs on tcsl.catalogue_state_id = tcs.catalogue_state_id
where 

not exists
(
    select tcsl2.catalogue_state_id from tbl_catalogue_state_lk as tcsl2
    where tcsl2.catalogue_state_id = 6 and tcsl2.catalogue_id = tc.catalogue_id
)
and 
not exists
(
    select tcsl3.catalogue_state_id from tbl_catalogue_state_lk as tcsl3
    where tcsl3.catalogue_state_id = 1 and tcsl3.catalogue_id = tc.catalogue_id
)

and 
not exists
(
    select tcsl3.catalogue_state_id from tbl_catalogue_state_lk as tcsl3
    where tcsl3.catalogue_state_id = 2 and tcsl3.catalogue_id = tc.catalogue_id
)
group by tc.catalogue_id;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню