[英]MySQL Results From Seperate Tables And No Common Fields
我有兩個表,它們的列完全不同。 例如:
A: B:
+-----+-------+------+ +------+------+-------+-------+
| id | price | name | | key | cost | title | color |
+-----+-------+------+ +-----+-------+-------+-------+
| 123 | 10.00 | Boat | | 456 | 12.00 | Ship | red |
+-----+-------+------+ +-----+-------+-------+-------+
| 124 | 8.00 | Car | | 457 | 5.00 | Truck | blue |
+-----+-------+------+ +-----+-------+-------+-------+
我想知道是否有一種方法可以返回一個單獨的結果集,該結果集保留其單獨的數據列,但強制轉換一個通用值以對結果進行排序。 例如,按成本/價格訂購:
[1] key = 456 cost = 12.00 title = Ship color = red
[2] id = 123 price = 10.00 name = Boat
[3] id = 124 price = 8.00 name = Car
[4] key = 457 cost = 5.00 title = Truck color = blue
由於我不想加入,並且UNION沒有任何公共列,因此無論如何要做這樣的事情?
編輯:
我應該注意,我的實際方案中的表包含更多列。 使用Union聽起來好像我必須將這些列彼此顯式映射,考慮到列數,這並不是完全理想的...
為了獲得單個結果集,我們可以使用兩個查詢的UNION ALL
設置操作。 列數和列的數據類型需要匹配。 我們可以使用任何表達式,包括文字。
SELECT v.*
FROM ( SELECT 'key = ' AS col1
, b.key AS col2
, 'cost = ' AS col3
, b.cost AS col4
, 'title = ' AS col5
, b.title AS col6
, 'color =' AS col7
, b.color AS col8
FROM B b
UNION ALL
SELECT 'id = ' AS col1
, a.id AS col2
, 'price = ' AS col3
, a.price AS col4
, 'name = ' AS col5
, a.name AS col6
, '' AS col7
, '' AS col8
FROM A a
) v
ORDER BY v.col4 DESC
通常,使用這種類型的UNION ALL
結果,我們會對哪個查詢返回該行感興趣,因此,包括附加列作為鑒別符是一種常見的模式。
在此示例中,我們可以使用col1
,因為對於來自B的行,它將包含'key ='
對於來自A的行將包含'id ='
。
請注意,對於A中的“缺失”列,我們只是在SELECT列表中使用了一個占位符文字來返回col7和col8的值,因此列數和數據類型將匹配。
實際上,所有字段都是通用的Key/ID
和price/cost
都是數字, title/name
都是字符串。
我認為這里唯一的解決方案是使用UNION
運算符並對列名進行別名以彼此匹配,並使用更通用的別名而不是cost
/ price
, title
/ name
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.