MYSQL - 将查找表列连接到一行

时间:2017-12-16 13:59:34

标签: mysql inner-join

我有以下表结构:

data structure

tbl_catalogue_state
enter image description here

在tbl_catalogue中,部件号为58674,在tbl_catalogue_state_lk表中有三种状态。这是我运行查询内部连接三个表时的结果。

enter image description here

正如预期的那样,返回了多行。

有没有办法只在同一行返回一个具有每个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;

我的问题是上面的语句仍然返回一行。我需要它什么也不返回。

1 个答案:

答案 0 :(得分: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;