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
谢谢
答案 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