我僵硬的实现了需求,但是肯定有更好的写法,求指教。
下边的3个表内容是我随意写的,表设计的实际合理性请无视。
关于SQL文运行环境问题,各位的答案任何数据库都可以,我自己脑补成我需求的环境文法就可以了。
需求:
一件商品的所有表信息在一行里表示
表:
table1
商品ID(PK),商品名,价格,规格
table2
商品ID(PK),供应商(PK),供货日期,保存时间
table3
商品ID(PK), 责任担当,部门
条件:
供应商固定有4个(a,b,c,d),每个商品ID都由4个供应商同时供应。
我现在的写法:
SELECT
t1.商品ID, t1.商品名, t1.价格, t1.规格,
t3.责任担当, t3.部门,
ta.供应商 供应商a, ta.供货日期 供货日期a, ta.保存时间 保存时间a,
tb.供应商 供应商b, tb.供货日期 供货日期b, tb.保存时间 保存时间b,
tc.供应商 供应商c, tc.供货日期 供货日期c, tc.保存时间 保存时间c,
td.供应商 供应商d, td.供货日期 供货日期d, td.保存时间 保存时间d
FROM
table1 t1,
table3 t3,
(SELECT 商品ID,供应商,供货日期,保存时间 FROM table2 WHERE 供应商 = a) ta,
(SELECT 商品ID,供应商,供货日期,保存时间 FROM table2 WHERE 供应商 = b) tb,
(SELECT 商品ID,供应商,供货日期,保存时间 FROM table2 WHERE 供应商 = c) tc,
(SELECT 商品ID,供应商,供货日期,保存时间 FROM table2 WHERE 供应商 = d) td
WHERE
ta.商品ID=t1.商品ID AND ta.商品ID=t3.商品ID AND ta.商品ID=tb.商品ID AND ta.商品ID=tc.商品ID AND ta.商品ID=
下边的比之前硬写多动了动脑子- -查询速度提高很多。
希望有高手写出更好的方式。
全选复制放进笔记SELECT
t1.商品ID, t1.商品名, t1.价格, t1.规格,
t3.责任担当, t3.部门,
MAX(subT.供应商a), MAX(subT.供货日期a), MAX(subT.保存时间a),
MAX(subT.供应商b), MAX(subT.供货日期b), MAX(subT.保存时间b),
MAX(subT.供应商c), MAX(subT.供货日期c), MAX(subT.保存时间c),
MAX(subT.供应商d), MAX(subT.供货日期d), MAX(subT.保存时间d)
FROM
(table1 t1
LEFT JOIN
table3 t3
ON t1.商品ID=t3.商品ID)
LEFT JOIN
(
SELECT
table2.商品ID 商品ID,
iif(table2.供应商='a',供应商,Null) 供应商a,
iif(table2.供应商='a',供货日期,Null) 供货日期a,
iif(table2.供应商='a',保存时间M,Null) 保存时间a,
iif(table2.供应商='b',供应商,Null) 供应商b,
iif(table2.供应商='b',供货日期,Null) 供货日期b,
iif(table2.供应商='b',供应商保存时间,Null) 保存时间b,
iif(table2.供应商='c',供应商,Null) 供应商c,
iif(table2.供应商='c',供货日期,Null) 供货日期c,
iif(table2.供应商='c',供应商保存时间,Null) 保存时间c,
iif(table2.供应商='d',供应商,Null) 供应商d,
iif(table2.供应商='d',供货日期,Null) 供货日期d,
iif(table2.供应商='d',供应商保存时间,Null) 保存时间d
FROM
table2
ORDER BY table2.商品ID
) subT
ON t1.商品ID=subT.商品ID
GROUP BY t1.商品ID
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。