簡體   English   中英

來自單獨表且無公共字段的MySQL結果

[英]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/IDprice/cost都是數字, title/name都是字符串。

我認為這里唯一的解決方案是使用UNION運算符並對列名進行別名以彼此匹配,並使用更通用的別名而不是cost / pricetitle / name

暫無
暫無

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

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