2017-02-23 5 views
1

Ich habe mehrere Tabellen amazonlistingsebaylistingsshopifylistings mit der gleichen Spalte SKU.MySQL Tabelle Alias ​​Name nur resultierende erste Alias ​​in Union

Ich versuche, eine Abfrage zu erstellen, die die Spalte SKU in all diesen Tabellen durchsucht. Im Moment mache ich das mit 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]');" 

Wenn ich diese einzeln ...

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

den SKUS von ebay bietet als gedacht ... aber aus irgendeinem Grund, wenn die obige Abfrage mit UNION zu verwenden versuchen, es wird nur die Bereitstellung der erste Alias ​​(amazon) unabhängig vom Ergebnis.

Mein beabsichtigtes Ergebnis (jetzt, ich bin nicht sicher, ob dies ideal ist oder nicht, aber das ist, was ich erreichen wollte), wäre wie

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

[amazon] [ebay] [shopify] 
      SKU 2 

etc ... ein leeres Ergebnis gesetzt (oder keine Ergebnismenge), wenn die Artikelnummer nicht gefunden wird, und ein Ergebnis, wenn die Artikelnummer gefunden wird. So kann ich überprüfen, ob die Artikelnummer in der entsprechenden Tabelle gefunden wurde.

+2

Dies ist das erwartete Verhalten, da ein SQL-Ergebnis nur 2-dimensional ist. Wie soll Ihr Ergebnis aussehen? Bitte post ein gewünschtes Ergebnis. Eine übliche Lösung besteht darin, ein String-Literal wie 'SELECT SKU, 'amazon' AS source FROM amazonlistings 'hinzuzufügen, wobei die' source'-Ausgabespalte den Variablenquellentabellenwert enthält. –

+0

Sie haben auch '$ danskuarray [$ i]' geschrieben, also wiederholen Sie dies in der Schleife? –

+0

Ich verstehe. Danke für den Leckerbissen. Ich habe meine Frage aktualisiert. @Oleksandr Savchenko das ist richtig .. – bbruman

Antwort

2

Die Auswahl Gewerkschaft eine Ergebnistabelle erstellen und eine Tabelle nur einen Spaltennamen haben können, so dass Sie nicht verschiedene Alias ​​auf den gleichen Spaltennamen .. und aus diesem Grund sql nur die erste

Sie können zurückkehren zuweisen ‚t erhalten verschiedene Alias ​​aus der Vereinigung auf diese Weise

stattdessen Sie jeden Wert mit einem geeigneten Wert

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

Auf diese Weise markieren könnten Sie obatain verschiedene qualfied Reihen

und das konnte man

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' 

alle YOUR_SKU Produkt für die ganze Quelle zu erhalten

Aber wenn Sie das Ergebnis alle für das gleiche SKU müssen in derselben Zeile (wie in der Probe Ihnen zur Verfügung gestellten) sollten Sie Verwenden Sie linken Join

+0

Ausarbeiten, gut aussehen. Die Quellenspalte war ideal. Vielen Dank! – bbruman

Verwandte Themen