3
我有一個表,它包含partnumbers和這些partnumbers的價格。這是我的主表,大約有100000個條目。我也有可能的供應商3桌。並非主表的所有分部都在3個供應商表中,而3個供應商表也有不同的內容。如何從工會刪除重複所有加入查詢
我想要的是查詢我的主表partnumbers 3表。如果在多個表格中找到零件號碼,它應該只返回最低價格。如果僅在1個表中找到,則返回該零件的價格。
我現在正在做的是以下查詢:
SELECT `table1.partnumber`,
`table1`.`price`,
`maintable`.`price`
FROM `table1`
INNER JOIN `maintable`
ON `table1`.`partnumber` = `maintable`.`partnumber`
UNION ALL
SELECT `table2`.`partnumber`,
`table2`.`price`,
`maintable`.`price`
FROM `table2`
INNER JOIN `maintable`
ON `table2`.`partnumber` = `maintable`.`partnumber`
UNION ALL
SELECT `table3.partnumber`,
`table3`.`price`,
`maintable`.`price`
FROM `table3`
INNER JOIN `maintable`
ON `table3`.`partnumber` = `maintable`.`partnumber`
這給了我所有我需要的數據,在那之後我檢查的最低價格,並刪除了更高的價格partnumbers用foreach PHP代碼。對於大量數據,這是非常緩慢的。
我確定有一種方法只能獲得最低價格的partnumber,如果該partnumber存在於多個表中,並且只返回價格(如果它只存在於一個表中)。我只是不知道如何查詢它的MySQL數據庫。我嘗試過使用聯合,聯合,分鐘和不同的組合,但無濟於事。
有人可以幫我嗎?
下面的eggyal的答案發送給我的方式。我現在有下面的查詢這對我的作品:
SELECT `partnumber`,MIN(`price`) as `price`
FROM (
SELECT `table1`.`partnumber`,
`table1`.`price`,
`maintable`.`price`
FROM `table1`
INNER JOIN `maintable`
ON `table1`.`partnumber` = `maintable`.`partnumber`
UNION ALL
SELECT `table2`.`partnumber`,
`table2`.`price`,
`maintable`.`price`
FROM `table2`
INNER JOIN `maintable`
ON `table2`.`partnumber` = `maintable`.`partnumber`
UNION ALL
SELECT `table3.partnumber`,
`table3`.`price`,
`maintable`.`price`
FROM `table3`
INNER JOIN `maintable`
ON `table3`.`partnumber` = `maintable`.`partnumber`
) AS `part` GROUP BY `partnumber`
也許有更好的方法,在這種情況下,我洗耳恭聽。但是爲了知道我對上述感到滿意。
謝謝eggyal,你的回答讓我走上正軌。使用的解決方案添加到我的問題 –
@MarcBuurke:您的解決方案將返回所有部件,無論它們出現的表的數量如何。你的問題說你只想要在多個表中存在的分號......或者我誤解了? – eggyal
是的,你做了,或者我應該更清楚。我編輯了這個問題,強調如果它只出現在一個表中,我需要一個partnumber。 –