如何比较表1的行和表2的列

时间:2017-05-09 07:41:11

标签: mysql sql

2桌

产品:

prod_id   prod_name
1          Citrus-fruit
2          bread
3          margarine
4          Ready-Soup
5          Tropical-fruit

trans:

trans_id   prod_1           prod_2          prod_3            prod_4
1          Citrus-fruit     margarine       Ready-Soup
2          bread            margarine       Tropical-fruit
3          Citrus-fruit     bread           margarine         Tropical-fruit
4          bread            Tropical-fruit
5          Citrus-fruit     bread           margarine         Tropical fruit

所以我想比较prod_name = prod_1并返回prod_id,prod_name = prod_2并返回prod_id等等

我尝试了一个mysql查询

select product.prod_id from `product` ,'trans' where product.prod_name=trans.prod_1;

上述查询无效。

我的期望是:

prod_1  prod_2    prod_3   prod_4
1        3         4
2        3         5
1        2         3         5
2        5
1        2         3         5

然后将以上table转换为text file作为:

1,3,4
2,3,5
1,2,3,5
2,5
1,2,3,5

谢谢

2 个答案:

答案 0 :(得分:0)

目前尚不清楚您的期望。但是,您可以尝试:

select * from product inner join trans on product.prod_name=trans.prod_1;

你应该找回匹配的元素。

答案 1 :(得分:0)

如果您想使用产品翻译名称' ids,您必须为每个列加入trans表和product表一次

select  p1.prod_id, p2.prod_id, p3.prod_id, p4.prod_id
from    trans t1
left join
        product p1
on      t1.prod_1 = p1.prod_name
left join
        product p2
on      t1.prod_2 = p2.prod_name
left join
        product p3
on      t1.prod_3 = p3.prod_name
left join
        product p4
on      t1.prod_4 = p4.prod_name
order by t1.trans_id

left join是必需的,因为在您的示例表中,某些产品似乎缺失了,因此使用inner joins不会返回所有缺少至少一个产品的行。

修改

如果您不想在应用程序级别添加逗号(我建议),您可以通过更改上面的查询来实现相同的目标

select  trim(trailing ',' from concat_ws(',', coalesce(p1.prod_id, ''),
                                              coalesce(p2.prod_id, ''),
                                              coalesce(p3.prod_id, ''),
                                              coalesce(p4.prod_id, '')
                                        )
            )
from    trans t1
left join
        product p1
on      t1.prod_1 = p1.prod_name
left join
        product p2
on      t1.prod_2 = p2.prod_name
left join
        product p3
on      t1.prod_3 = p3.prod_name
left join
        product p4
on      t1.prod_4 = p4.prod_name
order by t1.trans_id;

您可以看到两个版本的操作 here