2017-02-23 71 views
1

我有多個表amazonlistingsebaylistingsshopifylistings與同一列SKUMySQL表名別名僅在聯盟中產生第一個別名

我試圖創建一個查詢,在所有這些表中搜索SKU列。現在我正在用UNION做這件事。

$channeldetectquery = "(SELECT SKU as amazon FROM amazonlistings WHERE SKU = '$channelskuarray[$i]') 
    UNION 
(SELECT SKU as ebay FROM ebaylistings WHERE SKU = '$channelskuarray[$i]') 
    UNION 
(SELECT SKU as shopify FROM shopifylistings WHERE SKU = '$channelskuarray[$i]');" 

如果我做這些具有獨特...

SELECT SKU as ebay FROM ebaylistings WHERE SKU = 'Product SKU' 

從易趣提供的SKU爲目的,而是爲了嘗試使用上面的查詢與UNION它只是提供了一些時候的原因無論結果如何,第一個別名(amazon)。

我想要的結果(現在,我不知道這是理想與否,但這是我努力來實現),會像

[amazon] [ebay] [shopify] 
SKU 1    SKU 1 

[amazon] [ebay] [shopify] 
      SKU 2 

等...空的結果設置(或沒有結果集),如果沒有找到SKU,並且找到SKU的結果。這使我可以檢查並查看SKU是否在適當的表格中找到。

+2

這是預期的行爲,因爲SQL結果只有2維。你希望你的結果集看起來如何?請張貼樣本期望的結果。一個常見的解決方案是添加一個像SELECT SKU這樣的字符串,'amazon'源代碼來自amazonlistings',其中'source'輸出列將包含變量源表值。 –

+0

另外,你寫了'$ channelskuarray [$ i]',所以你在循環中重複這個? –

+0

我明白了。謝謝你的珍聞。我更新了我的問題。 @Oleksandr Savchenko,這是正確的。 – bbruman

回答

2

的選擇聯合建立一個結果表和表只能有一列名,所以你不能在不同的別名分配給相同的列名..基於這個原因,SQL返回僅第一

你可以從工會「T獲得不同的別名這樣

,而不是你可以用一個適當的值

$channeldetectquery = 
"(SELECT 'amazon' as source, SKU FROM amazonlistings WHERE SKU = '$channelskuarray[$i]') 
    UNION 
(SELECT 'ebay', SKU FROM ebaylistings WHERE SKU = '$channelskuarray[$i]') 
    UNION 
(SELECT 'shopify', SKU FROM shopifylistings WHERE SKU = '$channelskuarray[$i]');" 

這樣標記每個值你obatain不同行的Qualfied

和你可以

select * from 
(SELECT 'amazon' as source, SKU FROM amazonlistings WHERE SKU = '$channelskuarray[$i]') 
    UNION 
(SELECT 'ebay', SKU FROM ebaylistings WHERE SKU = '$channelskuarray[$i]') 
    UNION 
(SELECT 'shopify', SKU FROM shopifylistings WHERE SKU = '$channelskuarray[$i]') t 
where t.SKU = 'YOUR_SKU' 

獲得所有YOUR_SKU產品的所有源

但是如果你需要所有的結果爲相同的SKU在同一行(如你所提供的樣品中),你應該使用左連接

$channeldetectquery = 
"(SELECT amazonlistings.SKU as amazon, ebaylistings.SKU as ebay, hopifylistings.SKU as shopify FROM amazonlistings 
LEFT JOIN ebaylistings ON amazon.SKU = ebaylistings.SKU 
LEFT JOIN hopifylistings ON amazon.SKU = hopifylistings.SKU 
WHERE amazon.SKU = '$channelskuarray[$i]' 
WHERE SKU = '$channelskuarray[$i]') "; 
+0

解決,看起來不錯。來源欄是理想的。謝謝! – bbruman