2017-02-23 65 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