[英]SQL Union All alias from first table?
我有兩張桌子
[數據]-標題,制造商,零件號,價格
[cross]-產品(data.partnum),標題,制造商,partnum,價格
我想要的是通過sysn編號列出所有產品。 我該如何通過訂購來合並所有類似的數據->
我正在嘗試這個
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.