簡體   English   中英

SQL Union來自第一個表的所有別名?

[英]SQL Union All alias from first table?

我有兩張桌子

[數據]-標題,制造商,零件號,價格

[cross]-產品(data.partnum),標題,制造商,partnum,價格

我想要的是通過sysn編號列出所有產品。 我該如何通過訂購來合並所有類似的數據->

  1. [數據表]微軟,“一些注釋”,9899,20美元
  2. [交叉表] Microsoft經銷商,“一些注釋”,1045,30美元
  3. [交叉表] Microsoft的Apple轉銷商:),“ some note”,2233,40美元
  4. 虛擬墊片:)
  5. [數據表]微軟,“一些注釋”,9989,10美元
  6. [交叉表] Microsoft中的Lenovo轉售商。

我正在嘗試這個

SELECT `title`,'Microsoft' AS `maker`,`partnum`,`price`
    FROM data as d
    WHERE sysn=%s
    GROUP BY partnum
UNION ALL
    SELECT `title`,`maker`,`partnum`,`price`
    FROM cross as c
    WHERE c.product=d.partnum
    GROUP BY `partnum`

謝謝

如果您使用的是MySQL,則“ cross”是保留字,您必須將cross括在反引號中以用作表名(反引號位於鍵盤左上角的“ 1”旁邊)。

您要問的還不清楚。 考慮在http://sqlfiddle.com中設置示例架構和數據。

實現“虛擬間隔”將非常麻煩。 這不是完全不可能的,只是一團糟。

為了以特定順序返回行,您將需要添加ORDER BY子句。

尚不清楚為什么要包含GROUP BY子句。 給定partnum相同的值9989 ,第一個SELECT上的GROUP BY將有效地“折疊”示例輸出行1.和5.。 由於沒有解釋為什么需要GROUP BY ,因此我猜測您真正想要的是ORDER BY子句。

它也不清楚為什么文字值'Microsoft'將需要出現在SELECT列表中,取代的maker從列data表。 這樣做沒有什么無效的SQL方法。 但是缺少解釋,這沒有多大意義。

我們應該問的問題...為什么需要此特定結果? 是否有其他結果更容易實現,並且同樣滿足要求?

撇開“虛擬分隔符”行,這樣的查詢返回似乎滿足大多數規范:

SELECT t.src
     , t.title
     , t.maker
     , t.partnum
     , t.price
  FROM (
         SELECT '[data]'         AS `src`
              , d1.title         AS `title`
              , d1.maker         AS `maker`
              , d1.partnum       AS `partnum`
              , d1.price         AS `price`
              , d1.partnum       AS `product`
           FROM data d1
          WHERE d1.sysn = ?

          UNION ALL

         SELECT '[cross]'
              , c2.title
              , c2.maker
              , c2.partnum
              , c2.price
              , c2.product
           FROM cross c2
           JOIN data d2
             ON d2.partnum = c2.product
          WHERE d2.sysn = ?
       )
 ORDER BY t.product DESC, t.src DESC, t.price ASC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM