[英]Mysql union/join help with multiple columns
起初我認為這可以作為一個連接,但我不確定這是否真的是一個聯合命令,或者是否可能。 下面是兩個表的示例,每個表都有大約 20 列不同的數據。
表格1
> id assembly user1 user2 containerID productID packageID
1 line2 Billy John 3794 4892 4589
2 line4 John Doug 7794 6201 7864
表 2
> item_id name width height weight flag1 flag2
3794 Box 10 10 10 0 1
4892 Lamp 4 6 2 1 1
7864 BigBox 200 200 300 4 5
我要做的是顯示所有表 1,但使用匹配的 item_id 將 containerID、productID 和 packageID 替換為表 2 中的名稱。 嘗試在使用 foreach 的 mysql 之外執行此操作,但表 2 有 30k 行,當嘗試顯示表 1 中的數百行並將每個 id 替換為其等效名稱時,它“只是有點”滯后。
要查看所有 table_1 記錄,請使用:
SELECT t1.id, t1.assembly, t1.user1, t1.user2,
t2c.name, t2pr.name, t2pk.name
FROM TABLE_1 t1
LEFT JOIN TABLE_2 t2c ON t2c.item_id = t1.containerid
LEFT JOIN TABLE_2 t2pr ON t2pr.item_id = t1.productid
LEFT JOIN TABLE_2 t2pk ON t2pk.item_id = t1.packageid
您可以將它們更改為 INNER JOIN,但與所有三個不匹配的任何行都不會出現在結果集中。
我的查詢使用表別名,因為您必須為要查找的每個name
加入相應的TABLE_2
列。
嘗試使用這樣的東西:
SELECT id, assembly, user1, user2,
(SELECT name from table2 where item_id = table1.containerID),
(SELECT name from table2 where item_id = table1.productID),
(SELECT name from table2 where item_id = table1.packageID)
FROM table1
ORDER BY id;
您需要為每個 item_id 加入每行三次
SELECT t1.*, t21.name,t22.name,t23.name FROM table_1 t1
INNER JOIN table_2 t21 ON t1.containerID = t21.itemid
INNER JOIN table_2 t22 ON t1.productId = t22.itemid
INNER JOIN table_2 t23 ON t1.packageID = t23.itemid
確保 table_2 的 itemid 上有索引
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.