2017-02-23 1 views
1

私は複数のテーブルを持っていますamazonlistingsebaylistingsshopifylistings同じカラムのSKUです。MySQLテーブルエイリアス名ユニオンで生成される最初のエイリアス

これらすべてのテーブルの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' 

を行うと意図したとおり、それがeBayからのSKUを提供して...しかし、UNIONで上記のクエリを使用しようとしているいくつかの理由でのみ提供しています最初のエイリアス(amazon)は結果に関係なく発生します。

私の意図した結果(今、私は、これは理想的であるかないかどうかわからないんだけど、これは私が達成しようとしたものである)、

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

[amazon] [ebay] [shopify] 
      SKU 2 

などのようになります...空の結果SKUが見つからない場合はセット(または結果セットなし)、SKUが見つかった場合は結果です。これにより、適切な表にSKUがあるかどうかを確認して確認することができます。

+2

SQL結果が2次元のみであるため、これは予想される動作です。結果セットをどのように見たいのですか?希望のサンプルを投稿してください。一般的な解決法は、 'source SKU 'のような文字列リテラルを追加することです。' source'出力列には可変ソーステーブルの値が含まれていて、amazon 'AS source FROM amazonlistings'です。 –

+0

また、 '$ channelskuarray [$ i]'と書いてありますので、これをループで繰り返しますか? –

+0

私は参照してください。ちょっとしたお買い物に感謝します。私は私の質問を更新しました。 @Oleksandr Savchenkoは正しいです.. – bbruman

答えて

2

選択組合は、結果のテーブルを構築し、あなたが同じカラム名に異なるエイリアスを割り当てることはできませんので、テーブルには...のみ列名を持つことができ、このような理由のためにあなたができる唯一の最初の

を返すSQL 「トンではなく、あなたが異なるqualfied行

0123をobatainこのように適切な値で

$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]');" 

を各値をマークでき組合からこのよう

を別のエイリアスを取得します

あなたは

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

関連する問題