我正在尝试从中获取数据mySql DB
。总共有9个表,我必须从所有表中相应地显示产品列表。
我想到了使用JOIN,并尝试了LEFT JOIN,如下所示:
$query="SELECT table1.*,tbl2.*,tbl3.*,tbl4.*,tbl5.*,tbl6.*,tbl7.*",tbl8.*,tbl9.* FROM
table1
LEFT JOIN tbl2 ON table1.pid=tbl2.pid
LEFT JOIN tbl3 ON table1.pid=tbl3.pid
LEFT JOIN tbl3 ON table1.pid=tbl4.pid ... and so on upto tbl9 GROUP BY table1.pid";
这Table1
是主表,而pid是FK
从tbl2到tbl9的所有表。
注意:在这里,我已经.*
在所有表上使用以避免长时间查询,但是在实际的数据库操作中,仅提及特定列以提高性能。
现在的实际问题是,我没有使用LEFT JOIN从表中获取所有记录。只检索与中对应的每个条目的最后一行
table1
。
数据示例。
假设table1
有一个ID为ID的产品,2
那么在tbl2,tbl3中有多个条目,依此类推2
。
我如何也可以从其他表中获取所有数据而又没有重复的行。
表结构
table1
id | name | lastName
---------------------------------------
1 | john | doe
2 | helen | keller
table2
The userID column is a foreign key that references John Doe, so John orders 3 items.
id | userID | order
---------------------------------------
1 | 1 | pizza
2 | 1 | pasta
3 | 1 | lasagna
Table3
userID列是引用John Doe的外键,因此John留下5条评论。
id | userID | rating | comment
-------------------------------------------------
1 | 1 | 5/5 | was good
2 | 1 | 5/5 | excellent
3 | 1 | 4/5 | great
4 | 1 | 4/5 | great
5 | 1 | 4/5 | great
表结构是从这里复制的,因为它与我的相同。
结果如下:
id name lastname order order1 order2 MoreDetails
-------------------------------------------------
1 John doe pizza pasta lasgana click to view
现在,当人们单击视图时,将显示一个弹出窗口,其中包含表3中的所有数据。
此处不需要数据透视表,因为数据表示形式有所不同。
数据库: PostgreSQL
试试这个:
SELECT t1.id, t1.name, t1.lastname, (array_agg(t2.order))[1] as order,
(array_agg(t2.order))[2] as order1, (array_agg(t2.order))[3] as order2,
'Clicks to view' as "Moredetails"
FROM table1 as t1
LEFT JOIN table2 as t2 ON t1.id = t2."userID"
LEFT JOIN table3 as t3 ON t1.id = t3."userID"
WHERE t1.id = 1
GROUP BY 1,2,3
输出 :
id name lastname order order1 order2 MoreDetails
-------------------------------------------------
1 John doe pizza pasta lasgana click to view
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句